Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.60/10: Рейтинг темы: голосов - 10, средняя оценка - 4.60
YoungProgrammer
4 / 4 / 3
Регистрация: 18.01.2011
Сообщений: 206
1

Как определить конец файла при его считывании

22.10.2012, 00:00. Просмотров 1863. Ответов 6
Метки нет (Все метки)

Вот код программы, который должен выводить символы из файле input.txt в output
но она выводит их бесконечно, читал я в википедии
http://ru.wikipedia.org/wiki/%D0%A4%...0.B0.C2.BB_EOF
но так и не понял, как "прочитать" из файла символ и присвоить в обязательном порядке переменной типа char и чтоб не было ошибки.

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
 
#define MAX_STRING_SIZE 20
 
int main()
{
    FILE *pFile;
    int i = 0;
    char c = ' ';
    char stringFromFile[MAX_STRING_SIZE];
    char *InputFileName = "input.txt";
    int PhoneNumber[10] = {0};
    fopen_s(&pFile, InputFileName, "r");
    if (pFile == NULL)
    {
        printf("File '%s' wasn't opened. \n", InputFileName);
        getchar();
        return -1;
    }
    while (c != EOF)
    {
        i++;
        do
        {
            c = fgetc(pFile);
            printf("%c", c);
        }
        while (c != '/n' || c != EOF);
        fseek(pFile, i, SEEK_SET);  
    }
    getchar();
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.10.2012, 00:00
Ответы с готовыми решениями:

Конец файла при потоковом считывании
if (fin.eof()==0){ cout &lt;&lt; &quot;aaa&quot;; int asa; asa = (int)buf;...

Найти максимальное число в массиве при считывании его из файла
Задание: Задан текстовый файл, строки которого обычные числа. Количество строк...

Как пропустить строку при считывании из файла?
Подскажите, плз, как пропустить строку при считывании данных из текстового...

Как определить конец файла?
В файле лежит одно число, которое нужно проверить на делимость на 11. Число...

Как определить конец текстового файла?
Собственно весь вопрос в заголовке. Пробовал с eof, но не получается. ...

6
MrGrig
177 / 160 / 38
Регистрация: 08.10.2012
Сообщений: 423
22.10.2012, 01:04 2
Цитата Сообщение от YoungProgrammer Посмотреть сообщение
while (c != '/n' || c != EOF);
на так сказать геометрическом смысле это значит: Делать пока с не будет равен ентеру или пока не конец файла. От сюда вопрос, кто вам сказал что конец файла есть энтер? Данное условие всегда положительно, поставте условный оператор И (&&). И будет вам счастье.

Добавлено через 1 минуту
Цитата Сообщение от YoungProgrammer Посмотреть сообщение
printf("File '%s' wasn't opened. \n", InputFileName);
помоему печатаете в файл неправильно, лучше это делать через fprintf
0
accept
4833 / 3255 / 454
Регистрация: 10.12.2008
Сообщений: 10,569
22.10.2012, 06:09 3
C
1
2
3
4
    int c;
    
    while ((c = getc(ifp)) != EOF)
        putc(c, ofp);
с переменной типа char не получится, так как в charEOF, при условии, что он равен -1, совпадает с символом, код которого равен 0xFF
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
22.10.2012, 09:00 4
"я" это EOF?!
Существует ли EOF или это миф?
1
alsav22
5442 / 4837 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
22.10.2012, 11:38 5
Цитата Сообщение от YoungProgrammer Посмотреть сообщение
fseek(pFile, i, SEEK_SET);
Это для чего? Если просто считать по символу и вывести, то достаточно этого:
C++
1
2
3
4
5
while (!feof(pFile))
{
   c = fgetc(pFile);
   printf("%c", c);
}
0
Achez
0 / 0 / 0
Регистрация: 22.11.2015
Сообщений: 4
22.11.2015, 20:11 6
Спасибо за feof(), это то, что я искал. Только последняя буква будет повторяться в выводе дважды. Я чуть-чуть подправил:
C++
1
2
3
4
5
6
7
while (1)
{
   c = fgetc(pFile);
   if (feof(pFile))
     break;
   printf("%c", c);
}
0
Evg
Эксперт CАвтор FAQ
19288 / 7147 / 528
Регистрация: 30.03.2009
Сообщений: 19,997
Записей в блоге: 30
22.11.2015, 23:26 7
Цикл побайтного чтения более удобно пишут в виде (без feof'а):

C
int c;
while ((c = fgetc(pFile)) != EOF)
  printf ("%c", c);
0
22.11.2015, 23:26
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.11.2015, 23:26

Переполнение при считывании из файла
Подскажите пожалуйста, где ошибка, вот код чтения из файла: void...

Проблема при считывании из файла
Пишу простенькую программу по криптографии. В результате шифрования получается...

Ошибка при считывании двоичного файла
При считывании из .EXE файла возникает ошибка, а возникает она когда...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru