С ошибкой getchar - PullRequest
       80

С ошибкой getchar

2 голосов
/ 03 апреля 2011

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

Это код:

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char** argv) {
    int c, var4;
    double var1,var2,var3;

    while ((c = getchar()) != EOF) {

        while (c != ':') {
            putchar(c);
            c = getchar();
        }
        //scanf("%d/%d/%d",&mm,&dd,&yy);
        //scanf("%lf%lf%lf%d",&var1,&var2,&var3,&var4);  
    }
    return 0;
}

и я использую этот файл для ввода (перенаправление командной строки)

Имя1 - Код1:
04.03.2011 4,5 5,6 9,8 145
03.04.2011 6.5 4.6 9.9 185
Имя2 - Код2:
05.03.2011 4,5 5,6 9,8 135
05.03.2011 6.5 4.6 9.9 165

Ошибка появляется во время цикла while (я пробовал printf вместо putchar, и он печатает -1 бесконечно и, кажется, никогда не достигает EOF)

Думаю, это все, заранее благодарю за помощь.

Ответы [ 3 ]

2 голосов
/ 03 апреля 2011

Вы получаете один символ, затем идете во внутренний цикл - который проверяет на ':', но не на EOF. Таким образом, если файл не заканчивается на : (так, что он будет виден внешним циклом), внутренний цикл будет вращаться вечно, когда он достигает EOF.

1 голос
/ 03 апреля 2011

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

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

1 голос
/ 03 апреля 2011

Внутренний цикл не останавливается на EOF.

Вы получаете ошибку от getchar (EOF == -1) , так как файл завершен.Это то, что он печатает бесконечно.

...