Модераторы: Poseidon

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> [C] Игра "О, счасливчик" 
:(
    Опции темы
CrasyMen
Дата 19.1.2007, 00:41 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Поиогите написать эту игру в простом консольном виде. Заранее благодарю.
А вопросы я потом уже сам повпихываю. Вместо вопросов и вариантов ответов в коде программы напишите какой нибудь определенный техт.


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Rockie
Дата 19.1.2007, 00:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(CrasyMen @  19.1.2007,  00:41 Найти цитируемый пост)
Поиогите написать эту игру в простом консольном виде.

выкладывай свои соображения в коде и поможем




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Ramzey
Дата 19.1.2007, 01:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 11
Регистрация: 26.12.2006

Репутация: 1
Всего: 1



По-моему, самая большая проблема в базе вопросов.
PM MAIL   Вверх
CrasyMen
Дата 19.1.2007, 03:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



я просто не знаю с какой стороны приступить т.к. не имею опыта программирования.
Каким способом лучше всего делать? С помощью структур?


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
zkv
Дата 19.1.2007, 05:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



1. продумать как хранить базу вопросов - ответов
2. как читать\писать эту базу 
3. написать сам игровой процесс 
вообщем все просто smile

Думаю, важным моментом будет сохранение строк в файле, будете вы использовать бинарный режим доступа к файлу или текстовый, первый вариант ущербен тем, что файл невозможно будет редактировать простыми текстовыми редакторами, а второй вариант сложен тем, что придется использовать какой то свой язык разметки (наподобие XML), либо задавать правила редактирования/добавления вопросов.    (тут хотел сказать что класс надо свой накатать но вовремя опомнился smile )
PM MAIL   Вверх
Rockie
Дата 19.1.2007, 14:39 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



imho в стандартном Осчастливчике просто текстовый файл с вопросами. И туда можно свои дописывать.




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Rodman
Дата 19.1.2007, 14:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Цитата(CrasyMen @  19.1.2007,  02:30 Найти цитируемый пост)
С помощью структур

однозначно ДА...


Цитата(Rockie @  19.1.2007,  13:39 Найти цитируемый пост)
Осчастливчике просто текстовый файл с вопросами.

так сделать типизированный файл...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rockie
Дата 19.1.2007, 14:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



Цитата(Rodman @  19.1.2007,  14:43 Найти цитируемый пост)
так сделать типизированный файл...

а что есть типизированный файл?

Цитата

С помощью структур
Цитата(Rodman @  19.1.2007,  14:43 Найти цитируемый пост)
однозначно ДА...


а зачем тут структуры? imho просто чтение файла, вывод на экран и switch/case ответа




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Rodman
Дата 19.1.2007, 15:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Цитата(Rockie @  19.1.2007,  13:52 Найти цитируемый пост)
а что есть типизированный файл?

не понял!!!


Цитата(Rockie @  19.1.2007,  13:52 Найти цитируемый пост)
а зачем тут структуры? imho просто чтение файла, вывод на экран и switch/case ответа

удобнее работать, в этом случае...
PM MAIL WWW Skype GTalk YIM MSN   Вверх
Rockie
Дата 19.1.2007, 15:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



CrasyMen, к примеру в первой строке файла хранишь вопрос. на второй - 4 ответа и номер правильного ответа. Вопрос с ответами выводишь, а работаешь по сути только с номером. Если он совпал с тем номером который ввел пользователь - выигрыш. Это не единственный вариант оформления подобной игры, естественно

Добавлено @ 15:07 
Цитата(Rodman @  19.1.2007,  15:04 Найти цитируемый пост)
не понял!!!

что ты подразумеваешь под типизированным файлом



--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
Rodman
Дата 19.1.2007, 15:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Цитата(Rockie @  19.1.2007,  14:06 Найти цитируемый пост)
что ты подразумеваешь под типизированным файлом

файл типа структуры которая будет хранить вопросы с ответом (и вариантами ответов)...

типа того как бывают: бинарные файлы!!!
PM MAIL WWW Skype GTalk YIM MSN   Вверх
zkv
Дата 19.1.2007, 15:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(Rockie @  19.1.2007,  15:06 Найти цитируемый пост)
что ты подразумеваешь под типизированным файлом

в Паскале есть вроде такое понятие, сиплюсплюсникам не понять smile им достались только бинарные smile

Вообщем то, по большому счету, это те же бинарные файлы, только Паскаль (возможно и еще в каких-нибудь языках существует такое понятие)  определяет для них определенные правила чтения/записи.

Это сообщение отредактировал(а) zkv - 19.1.2007, 15:45
PM MAIL   Вверх
HmeL
Дата 19.1.2007, 15:33 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 21.12.2006

Репутация: нет
Всего: нет



CrasyMen, Был готовый исходник игры на С 3.0, в графическом режиме, сам когда-то в школе писал-баловался, там как раз нехватает файлов с вопросами и ответами.... Только она немного недоработанная.

Если подождешь - сегодня поищу в архивах, завтра выложу исходник.

zkv, не понять? В С нельзя объявить тип, как в Паскале. Но создать структуру, и объявить файл оф эта структура можно! И работать (читать-писать) структуры в файл можно запросто!

Это сообщение отредактировал(а) HmeL - 19.1.2007, 15:48
PM MAIL WWW ICQ   Вверх
Oleg_Ci
Дата 19.1.2007, 16:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Я так замутил smile 
Код

#include <stdio.h>
#include <windows.h>
#define size 1000

int main(){
    FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами
    if( !file ){
        puts("Error open file !");
        getchar();
        return 1;
    }
    char str[size], answer[size], buf[size];
    int num, nom;
    while( fscanf( file, ">%[^(]s", str ) >0 ){
        nom=0;
        fscanf( file, "(%d)", &num ); // считываем номер правильного ответа
        fscanf( file, "%[^>]s", answer ); // считываем ответы до символа '>'
        AnsiToOem( str, str );
        AnsiToOem( answer, answer );
        puts(str); // вывод вопроса
        puts(answer); // вывод ответов
        AnsiToOem( "Введите номер правильного ответа -> ", buf );
        printf( buf );
        scanf("%d", &nom );
        if( num != nom ){
            AnsiToOem( "Неправильно !!!\n\n", buf );
            printf( buf );
        }
        else{
            AnsiToOem( "Правильно !\n\n", buf );
            printf( buf );
        }
    }

    fflush(stdin);
    getchar();
    return 0;
}
Файл с текстом должен быть такого формата:
> вопрос (номер правильного ответа)
ответы
> вопрос ... и т.д.
Пример файла "text.txt":
Цитата
>Сколько будет два умножить на два ? (3)
1) один
2) два
3) четыре
4) десять
>Сколько будет один плюс один ? (2)
1) один
2) два
3) десять !
>Сколько на двух руках пальцев ? (4)
1) один
2) два
3) четыре
4) десять
5) сто !!!

PM MAIL   Вверх
zkv
Дата 19.1.2007, 16:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(HmeL @  19.1.2007,  15:33 Найти цитируемый пост)
Но создать структуру, и объявить файл оф эта структура можно!

как много нам открытий чудных... smile Приведите пример пожалуйста, интересно стало.
PM MAIL   Вверх
Rodman
Дата 19.1.2007, 17:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


CIO
****


Профиль
Группа: Участник
Сообщений: 6144
Регистрация: 7.5.2006
Где: Ukraine ⇛ Kyiv ci ty

Репутация: 26
Всего: 122



Цитата(zkv @  19.1.2007,  15:56 Найти цитируемый пост)

как много нам открытий чудных... 

Код

int...    
FILE *file;
.......
struct RECORD
{char name[30];
char year[5];
char kapit[6];
}a,b;

.......
fwrite(a,sizeof(a),1,file);//работа со структурой
fread(a,sizeof(a),1,file); 


Это сообщение отредактировал(а) Rodman - 19.1.2007, 17:21
PM MAIL WWW Skype GTalk YIM MSN   Вверх
CrasyMen
Дата 19.1.2007, 18:35 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Oleg_Ci, большое человеческое спасибо! Вот на таких людях и держится форум.
Когда просто сохранил текст который находиться выше в текстовом файле (text.txt), то в программе отображались иероглифы. Тогда я скопировал этот текст (с этой веб-страницы) Borland C++ 3.1, то в окне редактора кода естественно отображались те же иероглифы. Их я скопировал в блокнот и при сохранении меня спросило "Как сохранять?" (нажмите ОК если хотите сохранить в ANSI и весь юникод будет утрачен. или нажмите ОТМЕНА и выберите вариант сохранения). Сохранил с юникодом но тогда в программе пустой екран.
Если файл отсутствует то писало "File not found..." а тут пустое окно.

Цитата(Oleg_Ci @  19.1.2007,  16:36 Найти цитируемый пост)
FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами

а чтоб разобраться с этой строкой надо знать ВинАПИ?

Это сообщение отредактировал(а) CrasyMen - 19.1.2007, 18:39


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Rockie
Дата 19.1.2007, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1143
Регистрация: 23.4.2006

Репутация: 13
Всего: 31



[QUOTE=zkv,19.1.2007,  15:21]
Цитата(Rockie @  19.1.2007,  15:06 Найти цитируемый пост)
Вообщем то, по большому счету, это те же бинарные файлы, только Паскаль (возможно и еще в каких-нибудь языках существует такое понятие)  определяет для них определенные правила чтения/записи.

zkv, понятно, спасибо за разъяснение.

Добавлено @ 18:49 
Цитата(CrasyMen @  19.1.2007,  18:35 Найти цитируемый пост)
а чтоб разобраться с этой строкой надо знать ВинАПИ?

нет. самый простой выход из положения - заполни файл вопросами на английском.




--------------------
Чтобы иметь большой гардероб - надо иметь большой гардероб.
PM   Вверх
zkv
Дата 19.1.2007, 20:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Rodman, простите, но меня интересовало именно: 
Цитата(HmeL @  19.1.2007,  15:33 Найти цитируемый пост)
объявить файл оф эта структура можно!


Rockie, да не за что, ничего особо полезного в этой информации не вижу smile

Это сообщение отредактировал(а) zkv - 19.1.2007, 20:12
PM MAIL   Вверх
Oleg_Ci
Дата 20.1.2007, 15:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(CrasyMen @  19.1.2007,  21:35 Найти цитируемый пост)
Код

FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами

а чтоб разобраться с этой строкой надо знать ВинАПИ?

Нет это стандартная функция, из API в программе только AnsiToOem используется, для перевода кодировки smile 
PM MAIL   Вверх
CrasyMen
Дата 20.1.2007, 19:03 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Цитата(Oleg_Ci @  20.1.2007,  15:09 Найти цитируемый пост)
Нет это стандартная функция, из API в программе только AnsiToOem используется, для перевода кодировки 

Можете розтолковать поподробней? Про перевод кодировки.


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 20.1.2007, 19:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Ну это перевод из windows кодировки в dos кодировку, подробностями я не распологою smile , там помойму с кодовыми страницами что-то связано.
PM MAIL   Вверх
Damarus
Дата 20.1.2007, 20:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 7
Всего: 29



Цитата(Oleg_Ci @  20.1.2007,  19:52 Найти цитируемый пост)
Ну это перевод из windows кодировки в dos кодировку, подробностями я не распологою  , там помойму с кодовыми страницами что-то связано.

А может проще сразу в DOS'овской кодировке писать smile 
PM MAIL ICQ Jabber   Вверх
Oleg_Ci
Дата 21.1.2007, 05:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Ну раз у него проблемы с кодировками, то всё писать в DOS кодировке проще должно-быть.
PM MAIL   Вверх
HmeL
Дата 29.1.2007, 16:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 21.12.2006

Репутация: нет
Всего: нет



CrasyMen, вот исходник моих набросков.
LUCKY.PFR - это сурс-файл, в котором хранится вся папка RESOURCE (картинки, вопросы).
Картинки - обычные БМП, которые, чтоб не заморачиваться, я выводил на экран, запоминал Getimage'ем и пихал в файл (.img) то что запомнил. Так проще выводить на экран smile. Это все делает IMGVIEW.EXE, параметром передаешь имя БМП-файла - и он создает .img с таким же именем.

Единственное, что я забыл захватить - это упаковщик .PFR-файлов. Завтра притащу. Если надо исходник - кричи.

Присоединённый файл ( Кол-во скачиваний: 6 )
Присоединённый файл  _LUCKY.7z 58,18 Kb
PM MAIL WWW ICQ   Вверх
HmeL
Дата 29.1.2007, 16:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 29
Регистрация: 21.12.2006

Репутация: нет
Всего: нет



CrasyMen, А вот папочка RESOURCE. Если появятся еще какие-нить вопросы - стучи, лучше в аську

Присоединённый файл ( Кол-во скачиваний: 7 )
Присоединённый файл  RESOURCE.7z 38,83 Kb
PM MAIL WWW ICQ   Вверх
CrasyMen
Дата 3.3.2007, 21:21 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Спасибо HmeL
Правда твой пример сложноват. Я поговорил с преподавателем и прога примерно должна выглядить так: (в приложении)

Это сообщение отредактировал(а) CrasyMen - 3.3.2007, 21:22

Присоединённый файл ( Кол-во скачиваний: 10 )
Присоединённый файл  vid.txt 2,69 Kb


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Damarus
Дата 3.3.2007, 22:12 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Awaiting Authorisation
Сообщений: 671
Регистрация: 6.5.2006

Репутация: 7
Всего: 29



Цитата(CrasyMen @  3.3.2007,  21:21 Найти цитируемый пост)
Я поговорил с преподавателем и прога примерно должна выглядить так: (в приложении)

Такое проще в GUI сделать, ИМХО.
PM MAIL ICQ Jabber   Вверх
CrasyMen
Дата 3.3.2007, 23:23 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Цитата(Damarus @  3.3.2007,  22:12 Найти цитируемый пост)
Такое проще в GUI сделать, ИМХО. 

нет, надо только С.


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
CrasyMen
Дата 4.3.2007, 16:25 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



или так:


Присоединённый файл ( Кол-во скачиваний: 12 )
Присоединённый файл  vid2.txt 1,70 Kb


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
CrasyMen
Дата 7.3.2007, 19:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Цитата(Oleg_Ci @  19.1.2007,  16:36 Найти цитируемый пост)
Я так замутил smile 
Код

#include <stdio.h>
#include <windows.h>
#define size 1000

int main(){
    FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами
    if( !file ){
        puts("Error open file !");
        getchar();
        return 1;
    }
    char str[size], answer[size], buf[size];
    int num, nom;
    while( fscanf( file, ">%[^(]s", str ) >0 ){
        nom=0;
        fscanf( file, "(%d)", &num ); // считываем номер правильного ответа
        fscanf( file, "%[^>]s", answer ); // считываем ответы до символа '>'
        AnsiToOem( str, str );
        AnsiToOem( answer, answer );
        puts(str); // вывод вопроса
        puts(answer); // вывод ответов
        AnsiToOem( "Введите номер правильного ответа -> ", buf );
        printf( buf );
        scanf("%d", &nom );
        if( num != nom ){
            AnsiToOem( "Неправильно !!!\n\n", buf );
            printf( buf );
        }
        else{
            AnsiToOem( "Правильно !\n\n", buf );
            printf( buf );
        }
    }

    fflush(stdin);
    getchar();
    return 0;
}
Файл с текстом должен быть такого формата:
> вопрос (номер правильного ответа)
ответы
> вопрос ... и т.д.
Пример файла "text.txt":
Цитата
>Сколько будет два умножить на два ? (3)
1) один
2) два
3) четыре
4) десять
>Сколько будет один плюс один ? (2)
1) один
2) два
3) десять !
>Сколько на двух руках пальцев ? (4)
1) один
2) два
3) четыре
4) десять
5) сто !!!


Можеш вместо AnsiToOem написать printf-scanf? И вообше переделать код так чтоб обойтись без вин-апишных функций. Благодарю. 
З.Ы. Мне срочно нужно. 


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
CrasyMen
Дата 7.3.2007, 20:57 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Ой не надо, уже сам сделал.
Теперь проблема: как сделать чтобы вопрос вибирался случайно?


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 8.3.2007, 07:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Так-вот можно попробовать smile 
Код

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define size 1000

int position( FILE *file, int pos ); // устанавливаем позицию чтения в файле
// pos - номер вопроса

int main(){
    srand((unsigned)time(NULL));
    setlocale(LC_CTYPE, "Russian"); // для русских букв
    FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами
    if( !file ){
        puts("Error open file !");
        getchar();
        return 1;
    }
    int count; // всего вопросов в файле
    fscanf( file, "%d", &count ); // считываем количество
    printf("В файле всего вопросов -> %d\n\n", count );
    char str[size], answer[size];
    int num, nom;

    while( 1 ){
        int pos = rand()%count+1;
        position( file, pos ); // переход к новому вопросу
        fscanf( file, "%[^(]s", str ); // считывание вопроса
        nom=0;
        fscanf( file, "(%d)", &num ); // считываем номер правильного ответа
        fscanf( file, "%[^<]s", answer ); // считываем ответы до символа '<'
        puts(str); // вывод вопроса
        puts(answer); // вывод ответов
        printf( "Введите номер правильного ответа -> " );
        scanf("%d", &nom );
        if( num != nom ){
            printf( "Неправильно !!!\n\n" );
        }
        else{
            printf( "Правильно !\n\n" );
        }
        fflush(stdin);
    }

    fflush(stdin);
    getchar();
    return 0;
}
////////////////// End main /////////////////////////

int position( FILE *file, int pos ){
    fseek( file, 0, SEEK_SET ); // в начало
    int i;
    while( fscanf( file, "%*[^<]s")>=0 ){
        fscanf( file, "<%d>", &i );
        if( i == pos ) return 1; // Ok
    }
    return 0; // Error
}
Без AnsiToOem, только формат файла теперь немного изменился:
Цитата

3 (всего вопросов)
<1>Сколько будет два умножить на два ? (3)
1) один
2) два
3) четыре
4) десять
<2>Сколько будет один плюс один ? (2)
1) один
2) два
3) десять !
<3>Сколько на двух руках пальцев ? (4)
1) один
2) два
3) четыре
4) десять
5) сто !!!

PM MAIL   Вверх
CrasyMen
Дата 8.3.2007, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Oleg_Ci,  Спасибо огромное! Можно я буду задавать тебе вопросы в асю по этой программе? если да то стукни ко мне в асю 286214966


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
CrasyMen
Дата 8.3.2007, 12:29 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



я столкнулся с новой проблемой:
мне надо чтобы вопросы на 100 рублей были одни, на 200 - другие и так далее.
100
200
300
500
1000 - несгораемая сума
2000
4000
8000
16000
32000 - несгораемая сума 
64000
125000
250000
500000
1000000 - 
я пробовал подключать на 100 один файл, на 200 другой и т.д. но заплутался. Мучался долго совсем измотался. Молю о помощи
Вот так должна выглядить прога
Код


                _____________ __________ ____________ ____________  
               |             |          |            |            | 
               |(1)-помощь   |(2)-50x50 |(3)-дзвонок |(4)-забрать |
               |    зала     |          |    другу   |    деньги  | 
               |_____________|__________|____________|____________|

                            Ваши деньги: 
      ______________________________________________________________________
     /                                                                      \
    /                                                                        \
  _/                                                                          \_
   \                                                                          /
    \                                                                        /
     \______________________________________________________________________/
        ___________________________            ___________________________
       /                           \          /                           \   
  ____/ А:                          \________/ Б:                          \____
      \                             /        \                             /
       \___________________________/          \___________________________/
        ___________________________            ___________________________ 
       /                           \          /                           \   
  ____/ В:                          \________/ Г:                          \____
      \                             /        \                             /
       \___________________________/          \___________________________/



--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 8.3.2007, 18:42 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Цитата(CrasyMen @  8.3.2007,  15:29 Найти цитируемый пост)
мне надо чтобы вопросы на 100 рублей были одни, на 200 - другие и так далее.
Так можно замутить, возможно слишком мудрёно получилось.
Код

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define size 1000

int print( FILE *file, int sum ); // печать вопроса и ответов
int position( FILE *file, char *str ); // позиционирование
/* sum - стоимость */

int main(){
    srand((unsigned)time(NULL));
    setlocale(LC_CTYPE, "Russian"); // для русских букв
    FILE *file = fopen("test.txt", "r"); // открываем файл с вопрос-ответами
    if( !file ){
        puts("Error open file !");
        getchar();
        return 1;
    }
    const int count = 3; // 3 стоимости (100, 200, 300)
    int answer[count] = { 100, 200, 300 };
    int num, nom, i;
    for( i=0; i<count; i++ ){ // перебираем все "стоимости"
        printf("Вопрос стоимостью %d\n", answer[i] );
        num = print( file, answer[i] ); // печатаем какой-нибудь вопрос из текущей стоимости
        printf("Введите правильный ответ > ");
        scanf("%d", &nom );
        if( num != nom )
            printf( "Неправильно !!!\n\n" );
        else
            printf( "Правильно !\n\n" );
    }
    fflush(stdin);
    getchar();
    return 0;
}
////////////////// End main /////////////////////////

int print( FILE *file, int sum ){
    fseek( file, 0, 0 ); // позицыонирование в начало файла
    int pos, count, num, answer;
    char buf[size];
    // поиск стоимости
    while(1){
        pos = position( file, "стоимость" );
        if( !pos ) return 0; // error
        if( pos == sum ) break;
    }
    // поиск вопроса
    if( fscanf( file, ":%d", &count ) <=0 ) return 0;
    num = rand()%count +1; // выбираем вопрос из возможных
    while( position( file, "вопрос" ) != num );
    // печать вопроса
    fscanf( file, ">%[^<]s", buf );
    fscanf( file, "</вопрос>" );
    puts( buf );
    // печать ответов
    answer = position( file, "ответ" );
    fscanf( file, "%*[>\n]%[^<]s", buf );
    puts( buf );
    return answer;
}
/////////////////////////
int position( FILE *file, char *str ){
    char buf[100];
    int pos;
    fscanf( file, "%*[^<]" );
    fscanf( file, "<%s", buf );
    if( strcmp( buf, str ) != 0 )
        return -1;
    if( fscanf( file, "%d", &pos ) <=0 )
        return 0;
    return pos;
}
A так файл должен выглядеть, я тут XML пыталься изобразить smile 
Код
<стоимость 100:3><!-- на 100 рублей 3 вопроса -->
<вопрос 1> Сколько будет два умножить на два ? </вопрос>
<ответ 3>
1) один
2) два
3) четыре
4) десять
<вопрос 2>Сколько будет один плюс один ? </вопрос>
<ответ 2>
1) один
2) два
3) десять !
<вопрос 3>Сколько на двух руках пальцев ? </вопрос>
<ответ 4>
1) один
2) два
3) четыре
4) десять
5) сто !!!
</100><!-- конец вопросов на 100 рублей>

<!--______________________________-->
<стоимость 200:2><!-- на 200 рублей 2 вопроса-->
<вопрос 1>Два плюс два ?</вопрос>
<ответ 3>
1) один
2) два
3) четыре
<вопрос 2>Один плюс два ?</вопрос>
<ответ 4>
1) один
2) два
3) ноль
4) три
</200><!-- на 200 руб больше нет-->

<!--_________________________-->
<стоимость 300:1><!-- на три сотни 1 вопрос -->
<вопрос 1>Сколько будет если прибавить один и два, 
а потом вычесть один,
а потом ещё прибавить два ?</вопрос>
<ответ 2>
1) один
2) четыре
3) три
</300>
<вопросов нет><!-- конец дорумента -->

Цитата(CrasyMen @  8.3.2007,  13:17 Найти цитируемый пост)
тебе вопросы в асю по этой программе? если да то стукни ко мне в асю
Ася для меня дорого, без неё в месяц по 200-300 руб на интернет уходит.
PM MAIL   Вверх
CrasyMen
Дата 8.3.2007, 19:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Oleg_Ci,  жаль, пока не могу добавить тебе репутацию. Добавте кто-нибуть у кого 100 постов.
Ты только почаще заглядывай в эту тему. 

Это сообщение отредактировал(а) CrasyMen - 8.3.2007, 19:58


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Dov
Дата 8.3.2007, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


аСинизатор
***


Профиль
Группа: Завсегдатай
Сообщений: 1721
Регистрация: 10.5.2003
Где: Эрец-Исраэль

Репутация: 50
Всего: 88



CrasyMen
Цитата(CrasyMen @  8.3.2007,  18:56 Найти цитируемый пост)
Добавте кто-нибуть у кого 100 постов.

Done.  smile 



--------------------
Тут вечности запах томительный,
И свежие фрукты дешевые, 
А климат у нас – изумительный, 
И только соседи – #уевые. 
                           Игорь Губерман.
PM   Вверх
CrasyMen
Дата 11.3.2007, 17:15 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Oleg_Ci,  переделай свой код так чтобы пользователь вводил варианты ответа не 1 - 4, а "а", "b", "c" и "d".  И реализуй подсказку 50х50 (это не обязательно, но существенно облегчит мне жизнь)
это, наверно, уже последня просьба.

P.S. я не лентяй, я тоже работал над прогой.  Могу изложить здесь свой код (несколько не совсем удачных вариантов) если хотите.

Это сообщение отредактировал(а) CrasyMen - 11.3.2007, 17:20


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
zkv
Дата 11.3.2007, 17:26 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата



****


Профиль
Группа: Участник Клуба
Сообщений: 2133
Регистрация: 23.7.2006
Где: Санкт-Петербург

Репутация: 21
Всего: 92



Цитата(CrasyMen @  11.3.2007,  17:15 Найти цитируемый пост)
переделай свой код

Цитата(CrasyMen @  11.3.2007,  17:15 Найти цитируемый пост)
 И реализуй подсказку

CrasyMen, надо еще "БЕГОМ!!!" в конце добавить, а то вдруг подумают, что это просьба smile

PM MAIL   Вверх
CrasyMen
Дата 11.3.2007, 17:45 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



сильно извиняюсь, однако
Цитата(CrasyMen @  11.3.2007,  17:15 Найти цитируемый пост)
(это не обязательно, но существенно облегчит мне жизнь)
это, наверно, уже последня просьба.


чтобы не думали что я отредактировал свой пост (сравните время с временем публикации следующего поста):
Цитата(CrasyMen @  11.3.2007,  17:15 Найти цитируемый пост)
Это сообщение отредактировал(а) CrasyMen - 11.3.2007, 17:20 





--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Oleg_Ci
Дата 12.3.2007, 18:54 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Friend
**


Профиль
Группа: Участник
Сообщений: 485
Регистрация: 28.5.2006
Где: Новосиб.обл.

Репутация: 25
Всего: 30



Вот, ещё насочинял smile 
Чтоб 50х50 сработало вводи цифру '2'
До идеала ещё далеко smile 
Код

#include <locale.h>
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#define size 1000

int print( FILE *file, int sum ); // печать вопроса и ответов с чтением из файла sum - стоимость
int position( FILE *file, char *str ); // позиционирование
void out(); // печать вопросов и ответов
void clear(); // очистка состояния ответов answer[4]
void help(); // функция "помощь зала" (незаполнена)
void bell(); // функция "звонок другу" (незаполнена)
void _50x50( char num ); // функция "50x50" (сделана)

char question[size]; // вопрос
typedef struct ANSWER{
    char an[size]; // ответ
    // состояние ответа (если невыбраны то все равны нулю):
    int help; // 1) процент проголосовавших при "помощи зала"
    int bell; // 2) bell = 1, если ответ выбран "другом" (звонок другу)
    int _50x50; // 3) _50x50 = 1, если удалён !
}Answer;
Answer answer[4]; // всего может быть 4 ответа ...


//////////////////// Main ////////////////////////////////////////
int main(){
    srand((unsigned)time(NULL));
    setlocale(LC_CTYPE, "Russian"); // для русских букв
    FILE *file = fopen("text.txt", "r"); // открываем файл с вопрос-ответами
    if( !file ){
        puts("Error open file !");
        getchar();
        return 1;
    }
    const int count = 3; // 3 стоимости (100, 200, 300)
    int answer[count] = { 100, 200, 300 };
    char num, nom;
    int i;
    for( i=0; i<count; i++ ){ // перебираем все "стоимости"
        printf("Вопрос стоимостью %d\n", answer[i] );
        num = print( file, answer[i] ); // читаем какой-нибудь вопрос из текущей стоимости
        do{
            printf("\n\nВведите правильный ответ > ");
            scanf("%c", &nom );
            switch( nom ){
                case '1': help(); break;
                case '2': _50x50(num); break;
                case '3': bell(); break;
                case '4': exit(0); break;
                default: break;
            }
        fflush(stdin);
        }while( nom > '1' && nom < '4' );
        if( num != nom )
            printf( "Неправильно !!!\n\n" );
        else
            printf( "Правильно !\n\n" );
        fflush(stdin);
    }
    fflush(stdin);
    getchar();
    return 0;
}
////////////////// End main /////////////////////////

int print( FILE *file, int sum ){
    fseek( file, 0, 0 ); // позицыонирование в начало файла
    int pos, count, num, i;
    char an;
    char buf[size];
    // поиск стоимости
    while(1){
        pos = position( file, "стоимость" );
        if( !pos ) return 0; // error
        if( pos == sum ) break;
    }
    // поиск вопроса
    if( fscanf( file, ":%d", &count ) <=0 ) return 0;
    num = rand()%count +1; // выбираем вопрос из возможных
    while( position( file, "вопрос" ) != num );
    fscanf( file, ">%[^<]s", question );
    // поиск ответов
    fscanf( file, "%*[^<]" );
    fscanf( file, "<ответ %c>\n", &an ); // правильный ответ (a, b, c, d)
    for( i=0; i<4; i++ ){
        fscanf( file, "%[^\n]s", answer[i].an );
        fscanf( file, "%*[\n]" );
    }
    clear();
    out(); // вывод считанного из файла
    return an;
}
/////////////////////////
int position( FILE *file, char *str ){
    char buf[100];
    int pos;
    fscanf( file, "%*[^<]" );
    fscanf( file, "<%s", buf );
    if( strcmp( buf, str ) != 0 )
        return -1;
    if( fscanf( file, "%d", &pos ) <=0 )
        return 0;
    return pos;
}
////////////////////////////////////
void clear(){
    int i;
    for( i=0; i<4; i++ )
        answer[i].help = answer[i]._50x50 = answer[i].bell = 0;
}
/////////////////////////////
void out(){
    puts( question ); // вывод вопроса
    int i;
    for( i=0; i<4; i++ ){

        if( answer[i]._50x50 ) // если вопрос удалён
            printf( "((%s)) - вопрос удалён !", answer[i].an );
        else printf( "%s", answer[i].an ); // вывод ответа

        if( answer[i].help ) // если для вопроса "была помощь зала"
            printf( " > помощь зала: %d %%", answer[i].help );

        if( answer[i].bell ) // если вопросу "помог звонок другу"
            printf( " > помощь друга !" );

        puts(""); // перевод строки
    }
}
///////////////////////////////////
void _50x50( char num ){
    char a, b;
    do{
        a= rand()%4 + 'a';
    }while( a == num );
    do{
        b = rand()%4 + 'a';
    }while( b == a || b == num );
    answer[ a - 'a' ]._50x50 = 1;
    answer[ b - 'a' ]._50x50 = 1;
    out(); // вывод вопроса
}
///////////////
void help(){;}
void bell(){;}
Код
<стоимость 100:3><!-- на 100 рублей 3 вопроса -->
<вопрос 1> Сколько будет два умножить на два ?
<ответ c>
a) один
b) два
c) четыре
d) десять
<вопрос 2>Сколько будет один плюс один ?
<ответ b>
a) один
b) два
c) десять !
d) 100
<вопрос 3>Сколько на двух руках пальцев ?
<ответ d>
a) один
b) два
c) четыре
d) десять
<!-- конец вопросов на 100 рублей>

<!--______________________________-->
<стоимость 200:2><!-- на 200 рублей 2 вопроса-->
<вопрос 1>Два плюс два ?
<ответ c>
a) один
b) два
c) четыре
d) 100
<вопрос 2>Один плюс два ?
<ответ d>
a) один
b) два
c) ноль
d) три
<!-- на 200 руб больше нет-->

<!--_________________________-->
<стоимость 300:1><!-- на три сотни 1 вопрос -->
<вопрос 1>Сколько будет если прибавить один и два, 
а потом вычесть один,
а потом ещё прибавить два ?
<ответ b>
a) один
b) четыре
c) три
d) 100
<вопросов нет><!-- конец дорумента -->

PM MAIL   Вверх
CrasyMen
Дата 4.4.2007, 08:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 264
Регистрация: 19.12.2006

Репутация: нет
Всего: 3



Всем большое спасибо за помощь!
Прогу доработал, но не совсем понимаю:

Цитата(Oleg_Ci @  12.3.2007,  18:54 Найти цитируемый пост)
fscanf( file, "%[^\n]s", answer[i].an );
fscanf( file, "%*[\n]" );

объясните пожалуйста как работает "%[^\n]s" и "%*[\n]" 


--------------------
Человек просто обязан ошибаться, раз другие учатся на его ошибках.
[color=skyblue]Хочу сменить ник и сменю как только дадут такую возможность.[/color]
PM MAIL ICQ   Вверх
Страницы: (3) [Все] 1 2 3 
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Центр помощи"

ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Несоблюдение правил может повлечь за собой самые строгие меры от закрытия/удаления темы до бана пользователя!


  • Название темы должно отражать её суть! (Не следует добавлять туда слова "помогите", "срочно" и т.п.)
  • При создании темы, первым делом в квадратных скобках укажите область, из которой исходит вопрос (язык, дисциплина, диплом). Пример: [C++].
  • В названии темы не нужно указывать происхождение задачи (например "школьная задача", "задача из учебника" и т.п.), не нужно указывать ее сложность ("простая задача", "легкий вопрос" и т.п.). Все это можно писать в тексте самой задачи.
  • Если Вы ошиблись при вводе названия темы, отправьте письмо любому из модераторов раздела (через личные сообщения или report).
  • Для подсветки кода пользуйтесь тегами [code][/code] (выделяйте код и нажимаете на кнопку "Код"). Не забывайте выбирать при этом соответствующий язык.
  • Помните: один топик - один вопрос!
  • В данном разделе запрещено поднимать темы, т.е. при отсутствии ответов на Ваш вопрос добавлять новые ответы к теме, тем самым поднимая тему на верх списка.
  • Если вы хотите, чтобы вашу проблему решили при помощи определенного алгоритма, то не забудьте описать его!
  • Если вопрос решён, то воспользуйтесь ссылкой "Пометить как решённый", которая находится под кнопками создания темы или специальным флажком при ответе.

Более подробно с правилами данного раздела Вы можете ознакомится в этой теме.

Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Центр помощи | Следующая тема »


 




[ Время генерации скрипта: 0.1788 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.