Как на чистом Си можно завершить обработку потока stdin после нажатия клавиши Enter?

Рейтинг: 2Ответов: 2Опубликовано: 12.04.2015

Как можно завершить цикл после нажатия клавиши "Enter" на ванильном C?

while(scanf("%d", var)!=EOF) 
    printf("%d + %d = %d", var, var, 2*var)

На крайний случай можно использовать posix-функции.

Ответы

▲ 2Принят

На самом деле особенность scanf не позволит вам вводить числа вплоть до пустой строки, поскольку scanf будет всегда ждать вводимого числа, игнорируя все пустые символы (пробелы, табуляцию и новые строки).

Поэтому проще будет все реализовать через gets (или не deprecated fgets):

int main()
{
    char s[32];
    int n;

    while (fgets(s, sizeof(s), stdin) != 0 && *s != '\n') {
        n = atoi(s);  // конвертация строки в число
        printf("%d + %d = %d\n", n, n, n * 2);
    }

    return 0;
}
▲ 2
#include <stdio.h>

int main(void)
  {
  int x;

  for (char *format="%d"; scanf(format, &x) == 1; format="%*[ ]%d")
    printf("%d + %d = %d\n", x, x, x+x);

  return 0;
  }

Предполагается, что требуется ввести хотя бы одно значение.