как мешать чтению файл в C

Я просто пытаюсь считать каждый символ файла и распечатать его, но когда файл заканчивает читать, но я получаю набор? после того, как это заканчивает читать. Как я фиксирую его?

#include <stdio.h>

int main(void){
    FILE *fr;            /* declare the file pointer */

    fr = fopen ("some.txt", "r");  /* open the file for reading */
        /* elapsed.dta is the name of the file */
        /* "rt" means open the file for reading text */
    char c;
    while((c = getc(fr)) != NULL)
    {
        printf("%c", c);
    }
    fclose(fr);  /* close the file prior to exiting the routine */
    /*of main*/ 


    return 0;
}
6
задан benzado 15 January 2010 в 04:55
поделиться

7 ответов

Я вижу только два преимущества для небольших сайтов быть: 6) RESTful urls, который позволяет SEO. 7) Отсутствие событий ViewState и PostBack (и повышение производительности в целом)

Тестирование для небольших сайтов не является проблемой, равно как и преимущества проектирования, когда сайт в любом случае закодирован правильно, MVC во многом запутывает и затрудняет внесение изменений. Я все еще решаю, стоят ли эти преимущества.

Я ясно вижу преимущество MVC на более крупных сайтах с несколькими разработчиками.

-121--653050-

один альтернативный способ

awk -F":" '{print "user: "$1", Home directory is: "$6}' /etc/passwd
-121--4557537-

Несмотря на свое имя, getc возвращает int , а не char , так что он может представлять все возможные значения символов и, кроме того, EOF Если getc возвращает char , не будет путь указать конец файла без использования одного из значений, которое может быть в файле.

Поэтому для исправления кода необходимо сначала изменить объявление char c; на int c; , чтобы оно могло удерживать маркер EOF при возврате. Затем необходимо изменить условие while loop для проверки EOF вместо NULL .

Вы также можете вызвать feof (fr) , чтобы проверить конец файла отдельно от чтения символа. Если вы сделали это, вы могли бы оставить c в качестве char , но вам пришлось бы вызвать feof () после того, как вы прочитали символ, но прежде, чем распечатать его, и использовать break , чтобы выйти из цикла.

7
ответ дан 8 December 2019 в 17:21
поделиться

При отсутствии удаленного узла возникли проблемы с recentf и удаленным файлом.

(setq recentf-keep '(file-remote-p file-readable-p))

Может решить проблему (удаленный файл будет храниться без тестирования, если он все еще существует).

-121--3926491-

fgetc () возвращает EOF в конце файла, а не NULL .

-121--4213606-

Заменить «NULL» на «EOF».

1
ответ дан 8 December 2019 в 17:21
поделиться

В случае неудачи, fgetc() возвращает EOF.

int c;
while ((c = getc(fr)) != EOF) 
{ 
    printf("%c", c); 
}
2
ответ дан 8 December 2019 в 17:21
поделиться

FETGETC () Возвращает EOF на конец файла, а не NULL .

1
ответ дан 8 December 2019 в 17:21
поделиться

Измените это

char c;
while((c = getc(fr)) != NULL)
{
    printf("%c", c);
}

на

char c;
int charAsInt;
while((charAsInt = getc(fr)) != EOF)
{
     c = (char) charAsInt;
     printf("%c", c);
}

, другими словами: Вам нужно сравнить с EOF, а не с NULL. Также необходимо использовать переменную int для получения возвращаемого значения из fgetc. Если Вы используете char, то сравнение с EOF может завершиться неудачно, и Вы вернетесь с того места, с которого начали.

1
ответ дан 8 December 2019 в 17:21
поделиться

GUTC возвращает int .

Изменение CHAN C , к INT C .

также getc возвращает EOF , Измените свой тест против NULL к тесту против EOF

1
ответ дан 8 December 2019 в 17:21
поделиться

Другие уже решали проблему, имеющуюся, но, а не использование Printf («% C», C); , вероятно, гораздо более эффективно использовать Putchar (C); . Когда вы просите , участвуют довольно много накладных расходов , чтобы распечатать только один символ.

1
ответ дан 8 December 2019 в 17:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: