Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > При чтении файла в его конец добавляются цифры.


Автор: Sammi2186 10.12.2013, 15:53
В файле записано такое:
3 9 3 4 5
5 4 3 2 1
1 3 -3 2 9
1 5 3 6 2
5 3 7 8 9
6 3 8 9 20

Далее я начинаю подсчет цифр в нем, не важно для чего. Вообще при чтении добавляются некоторые цифры в конец файла:
Код
if(!(file1=fopen(argv[1], "r")))
    {
        printf("Ошибка открытия файла\n");
        return;
    }
    
    while(!(feof(file1)))
        if(isdigit(c=fgetc(file1)))
            i++;

Иногда эти цифры могут убраться, а иногда - нет.
Перед ННННННН добавились 9 20. Из-за них все неправильно работает. Подскажите, пожалуйста, из-за чего происходит?

Автор: Alexeis 10.12.2013, 16:06
  Просто строка в С++ должна завершаться нулем, чтобы правильно отображаться. В файле нет завершающих нулей, там строки обычно разделяются символами возврата каретки, а в самом конце ничего нет. Этот самый ноль нужно записать самостоятельно после того как вычитался весь файл.

Автор: Sammi2186 10.12.2013, 16:14
Цитата(Alexeis @ 10.12.2013,  16:06)
Просто строка в С++ должна завершаться нулем, чтобы правильно отображаться. В файле нет завершающих нулей, там строки обычно разделяются символами возврата каретки, а в самом конце ничего нет. Этот самый ноль нужно записать самостоятельно после того как вычитался весь файл.

Но как я узнаю, где его конец?
Мне нужно посчитать количество строк в файле. Я не знаю заранее, сколько их. Но я знаю, сколько цифр в каждой строке. В моем файле, в каждой строке 5 цифр. Я считаю общее количество цифр, чтобы поделить на 5, и получу количество строк. Это глупо, да? Но из-за этих лишних, появляющихся цифр количество реально существующих цифр не такое, как должно быть. Т.е. должно быть 30 цифр, а из-за 9 и 20 получается 32 цифры. 

Автор: Sammi2186 10.12.2013, 16:30
Я неправильно написал здесь. 
Код

while(!(feof(file1)))
        if(isdigit(c=fgetc(file1)))
            i++;

Это сработает только для однозначных положительных чисел. Можно так:
Код

while(!(feof(file1)))
        if(fscanf(file1, "%d", j))
            i++;


Добавлено @ 16:37
Кажется все работает. 
Код

while((fscanf(file1, "%d", &j))!=EOF)
        i++;   

Спасибо. Решено вроде.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)