Дополнительный вывод, потому что для каждого ввода у вас есть дополнительный символ для ограничителя строки.
Попробуйте, чтобы точно увидеть, что возвращает 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» из вашей рутины.