Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 06.05.2009, 22:10   #1
Sh2009
 
Регистрация: 06.05.2009
Сообщений: 3
Хорошо Подскажите, куда деваются переаменные? Visual C++

Всем доброго времени суток. Есть такой вот код (компилятор - VC++6.0)-

char day[1];
char month[1];
char year[1];//переменных несколько больше....но это не суть важно
.........
//Тут открываем файл и работаем с ним.
//файл текстовый, содержит строку - 01022009
//требуется считать число, месяц и год.
FILE *file;
file = fopen("data.txt","r");
if (file == 0) {AfxMessageBox("Error opening file!",MB_OK,MB_APPLMODAL);}
else
{

fgets(day,3,file);
fgets(month,3,file);
fgets(year,5,file);

fclose(file);
}


Ну и так далее. Проблема вот в чем - значения переменных day, month и year теряются в процессе выполнения программы. Понимаю, это странно, но если писать такой код:
fgets(day,3,file);
AfxMessageBox(day,MB_OK,MB_APPLMODA L);
fgets(month,3,file);
AfxMessageBox(month,MB_OK,MB_APPLMO DAL);
fgets(year,5,file);
AfxMessageBox(year,MB_OK,MB_APPLMOD AL);

то переменные корректно считываются из файла и выскакивают в окошечке.

а вот если я делаю так -
fgets(day,3,file);
fgets(month,3,file);
fgets(year,5,file);

//............. какой-то код.....

AfxMessageBox(day,MB_OK,MB_APPLMODA L);
AfxMessageBox(month,MB_OK,MB_APPLMO DAL);
AfxMessageBox(year,MB_OK,MB_APPLMOD AL);

то в окошечке вместо реальных значений вылезают какая-то ерунда или обрывки фраз из моего файла (которые после даты). Не понимаю, как такое возможно? переменные не переназначал, вообще с ними ничего не делал. Конечно, понимаю, что можно просто попытаться поработать с файлами по-другому, через потоки, например, но уж очень интересно докопаться до сути, ибо начинаю думать, что во всем виновата злая Мелкософта со своим компилятором....
Спасибо за проявленный интерес к моему посту!
Sh2009 вне форума Ответить с цитированием
Старый 06.05.2009, 22:19   #2
Somebody
Участник клуба
 
Регистрация: 08.10.2007
Сообщений: 1,185
По умолчанию

fgets(day,3,file); - максимум 3, а размер day при этом - всего 1.
Somebody вне форума Ответить с цитированием
Старый 06.05.2009, 22:23   #3
Sh2009
 
Регистрация: 06.05.2009
Сообщений: 3
По умолчанию

Ну и что? он в переменную day помещает значение "01", в month "02" в year "2009". Не понимаю.
Sh2009 вне форума Ответить с цитированием
Старый 06.05.2009, 23:54   #4
counter
Участник клуба
 
Регистрация: 18.10.2008
Сообщений: 1,409
По умолчанию

Sh2009, тебе уже Somebody показал что не так

ты считываеш 3 символа в массив размерностью 1

сделай так

Код:
char day[3]; 
char month[3];
char year[5];

.....

fgets(day,3,file); 
fgets(month,3,file);
fgets(year,5,file);
counter вне форума Ответить с цитированием
Старый 07.05.2009, 00:34   #5
Sh2009
 
Регистрация: 06.05.2009
Сообщений: 3
По умолчанию

Ааа, блин, вот я отжег... Точняк... а я думал, что в переменную month [1] помещается целая строка... Спасибо большое!
Sh2009 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
подскажите как пользоваться этим Microsoft Visual C++ 7.1 tsergey Софт 7 17.03.2009 14:48
Подскажите как програмно установить Шрифт (Visual Basic 6) С.М.С Помощь студентам 8 07.01.2009 02:03
Куда поступать...? Timofei Свободное общение 3 19.06.2008 13:15