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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 29.07.2013, 00:07   #1
IRomanKozlov
Пользователь
 
Регистрация: 24.07.2011
Сообщений: 11
По умолчанию eof() Возвращает TRUE

Пишу на Си. IDE - Dev-C++
Хотел прочитать весь файл, но функция eof() возвращает TRUE, хотя я ещё прочесть ничего не успел и сам файл содержит большое количество строк.

Код:
fIn = NULL; fOut = NULL;
fIn = fopen(szPathIn, "rt");
fOut = fopen(szPathOut, "wt");
if (fIn == NULL)
	MessageBox(NULL, "Файл на чтение не найден", "Ошибка", MB_OK);
if (fOut == NULL)
	MessageBox(NULL, "Файл на запись не найден", "Ошибка", MB_OK);
	
fscanf(fIn, "%s", szBuffer);
MessageBox(NULL, szBuffer, "", MB_OK);
//Читаем весь файл
while(!eof(fIn)){
	fscanf(fIn, "%s", szBuffer);
	MessageBox(NULL, szBuffer, "", MB_OK);
}
fscanf(fIn, "%s", szBuffer);
MessageBox(NULL, szBuffer, "", MB_OK);
В данном примере только 3-й и 4-й MessageBox выводят сообщения. Из библиотек подключены "windows.h" & "stdio.h". Помогите разобраться.

Последний раз редактировалось IRomanKozlov; 29.07.2013 в 00:47.
IRomanKozlov вне форума Ответить с цитированием
Старый 29.07.2013, 00:32   #2
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
fscanf(fIn, "%s", szBuffer);
MessageBox(NULL, szBuffer, "", MB_OK);
А разве здесь вы уже не считали, что нужно, из файла?
Может быть считали И курсор переместился на конец файла?
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 00:38   #3
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
while(!eof(fIn)){
	fscanf(fIn, "%s", szBuffer);
	MessageBox(NULL, szBuffer, "", MB_OK);
}
fscanf(fIn, "%s", szBuffer);
MessageBox(NULL, szBuffer, "", MB_OK);
И что вы собираетесь считывать, когда достигнут конец файла?
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 00:43   #4
IRomanKozlov
Пользователь
 
Регистрация: 24.07.2011
Сообщений: 11
По умолчанию

Цитата:
Может быть считали И курсор переместился на конец файла?
Дело не в этом. Файл намного больше, чем 2 строки. Функция fscanf() до, и после цикла были вставлены мной ради эксперимента. Именно эти функции срабатывают, а вот внутрь цикла программа никак не заходит =(
IRomanKozlov вне форума Ответить с цитированием
Старый 29.07.2013, 00:48   #5
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Код:
fIn = NULL; fOut = NULL;
fIn = fopen(szPathIn, "rt");
fOut = fopen(szPathOut, "wt");
if (fIn == NULL)
	MessageBox(NULL, "Файл на чтение не найден", "Ошибка", MB_OK);
if (fOut == NULL)
	MessageBox(NULL, "Файл на запись не найден", "Ошибка", MB_OK);
	
rewind(fIn);
//Читаем весь файл
while(!eof(fIn)){
	fscanf(fIn, "%s", szBuffer);
	MessageBox(NULL, szBuffer, "", MB_OK);
}
Попробуйте так.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 00:56   #6
IRomanKozlov
Пользователь
 
Регистрация: 24.07.2011
Сообщений: 11
По умолчанию

Цитата:
rewind(fIn);
Не помогло. Ни единого MessageBox'а не получил..

Последний раз редактировалось IRomanKozlov; 29.07.2013 в 00:59.
IRomanKozlov вне форума Ответить с цитированием
Старый 29.07.2013, 00:59   #7
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

Хорошо, попробуйте вместо eof() использовать EOF.
while (!EOF)
И для проверки выводите количество считанных символов (возвращаемое значение fscanf()), а не MessageBox сообщения.

Последний раз редактировалось Igor95; 29.07.2013 в 01:05.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 01:06   #8
IRomanKozlov
Пользователь
 
Регистрация: 24.07.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
!EOF(fIn)
called object is not a function. Так говорит DevCpp.
IRomanKozlov вне форума Ответить с цитированием
Старый 29.07.2013, 01:08   #9
Igor95
Форумчанин
 
Регистрация: 03.01.2013
Сообщений: 388
По умолчанию

EOF - не функция, а макрос.
Igor95 вне форума Ответить с цитированием
Старый 29.07.2013, 01:21   #10
IRomanKozlov
Пользователь
 
Регистрация: 24.07.2011
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Igor95 Посмотреть сообщение
EOF - не функция, а макрос.
Спасибо. Наконец разобрался. Вот конечный вариант:
Код:
fIn = NULL
fIn = fopen(szPathIn, "rt");
if (fIn == NULL){
	MessageBox(NULL, "Файл на чтение не найден", "Ошибка", MB_OK);
	return;
}
//Читаем весь файл
fscanf(fIn, "%s", szBuffer);
while(szBuffer != EOF){
	fscanf(fIn, "%s", szBuffer);
}
IRomanKozlov вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написать условие, которое возвращает значение true harvey Помощь студентам 1 10.10.2012 20:38
EOF goluzov Общие вопросы C/C++ 1 07.12.2011 09:50
while(! input.eof()) kaljan775 Общие вопросы C/C++ 4 09.10.2010 12:41
Почему _kbhit возвращает TRUE при отсутствии нажатий? Catharsis Общие вопросы C/C++ 3 01.08.2010 17:40
Запрос возвращает пустую таблицу, если один из подзаросов возвращает пустую таблицу ArtInt SQL, базы данных 9 12.05.2010 15:40