正如标题所述,我需要读取数字,直到按CTRL + D为止。我当时在考虑getchar(),但我需要将负数与正数分开,这样我会觉得很复杂。
答案 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 $
当我选择一个无效字符时,它只能读取一个字符,也可以绕过该行的其余部分,或者停止读取数字,这是一种选择。