getc (fp) вызывает проблемы - PullRequest
       33

getc (fp) вызывает проблемы

0 голосов
/ 21 февраля 2012

Вот мой код.

#include<stdlib.h>
#include<stdio.h>
int main(int argc,char** argv)
{
    char a;
    a=9;
    FILE * fp;
    fp=fopen(argv[1],"r");
    while(a!= EOF)
    {
        a=fgetc(fp);
        printf("\n%d",a);
    }
}

Вывод этого все в порядке, но в конце я получаю странный символ с -1 (так как я печатаю целочисленное значение.

Как остановить это только на EOF? И что это за персонаж?

Ответы [ 4 ]

2 голосов
/ 21 февраля 2012

Помимо методов в других ответах, вы также можете сделать так:

while ((a = fgetc(fp)) != EOF)
{
    printf("%d\n", a);
}

Теперь у вас есть несколько альтернативных решений. :)

Редактировать: Как R .. любезно напоминает нам, вы также должны изменить тип a на int.

2 голосов
/ 21 февраля 2012

Вы печатаете символ EOF (-1), поскольку вы не проверяете, встречался ли EOF сразу после fgetc().Измените структуру цикла на:

int a; /* not char, as pointed out by R... */

for (;;)
{
    a = fgetc(fp);
    if (EOF == a) break;
    printf("\n%d", a):
}
1 голос
/ 21 февраля 2012

Вам нужно, чтобы a имел тип int, так как этот тип является типом возврата fgetc() и необходим для правильного представления EOF.

0 голосов
/ 21 февраля 2012

Почему бы вам не остановить while с этим условием:

do {...}while(a != EOF)

Я полагаю, что полученное значение EOF ПОСЛЕ прочитайте его. Итак, вы делаете цикл дополнительное время

...