Я предлагаю использовать
while(!feof(stdin) && scanf ( "%d %d ", &a, &b) == 2)
и на самом деле лучше протестировать feof после (не раньше!) Некоторой операции ввода, поэтому:
while (scanf("%d %d ", &a, &b) == 2 && !feof(stdin))
Кстати, во многих системах stdin
является строкой с буферизацией, по крайней мере, с интерактивными терминалами (но, возможно, не тогда, когда stdin является pipe (7) ) см. setvbuf (3)
В Linux и POSIX вы можете рассмотреть чтение каждой строки с getline (3) (или даже с readline (3) при чтении из терминала, поскольку readline
предлагает редактирование способности), а затем анализ этой строки, например, sscanf (3) (возможно, также с использованием %n
) или strtol (3)