在按CTRL + D之前,如何从键盘读取数字?

时间:2019-05-24 15:47:20

标签: c

正如标题所述,我需要读取数字,直到按CTRL + D为止。我当时在考虑getchar(),但我需要将负数与正数分开,这样我会觉得很复杂。

1 个答案:

答案 0 :(得分:0)

您可以使用 scanf 尝试读取一个数字(这里我想是 int ),然后使用 getchar (或同等功能)来绕过无效的数字字符并无法检测EOF:

#include <stdio.h>

int main()
{
  for (;;) {
    int v;

    if (scanf("%d", &v) == 1)
      printf("read %d\n", v);
    else
      // bypass invalid char
      if (getchar() == EOF)
        break;
  }

  puts("done");
}

编译结束执行:

pi@raspberrypi:/tmp $ gcc -pedantic -Wall -Wextra c.c
pi@raspberrypi:/tmp $ ./a.out
12 aze -23
read 12
read -23
   3 e
read 3
done
pi@raspberrypi:/tmp $ 

在raspberrypi下,我输入两个连续的 control-d 来表示EOF

使用 echo 也可以产生EOF:

pi@raspberrypi:/tmp $ echo "123 aze -23 " | ./a.out
read 123
read -23
done
pi@raspberrypi:/tmp $ 

当我选择一个无效字符时,它只能读取一个字符,也可以绕过该行的其余部分,或者停止读取数字,这是一种选择。