Возможно ли, чтобы одна функция printf () выполнялась несколько раз при получении входных данных от getchar () в цикле? - PullRequest
0 голосов
/ 04 февраля 2019

Я ожидал, что getchar ()! = EOF всегда будет возвращать единственное логическое значение, которое будет присвоено 'c', и выход будет равен 0 или 1 для каждой итерации цикла, однако я получаю несколько выходных данныхдля одного входа.

#include<stdio.h>
main()
{
    int c;
    while(1)
    {
        printf("%d\n",c = (getchar() != EOF));
    }
}

Для входа 1 выход равен 11, а для входа -2 - 111.

Что может быть причиной его многократной печати?

1 Ответ

0 голосов
/ 04 февраля 2019

Дополнительный вывод, потому что для каждого ввода у вас есть дополнительный символ для ограничителя строки.

Попробуйте, чтобы точно увидеть, что возвращает getchar () для каждого из ваших входов:

#include<stdio.h>
int main()
{
    int c;
    while(1)
    {
      c = getchar();
      printf( "x%x\n", c );
      /* printf("%d\n",c = (getchar() != EOF)); */
    }
}

Когда вы вводите 1, вы получаете два символа,

x31
xa

Когда вы печатаете -2, у вас есть три символа,

x2d
x32
xa

Поскольку ни один из вышеперечисленных не является EOF, вы получаете несколько «1» из вашей рутины.

...