我是 C 语言的新手,我以前使用 Python,我想看看我读到的东西是否是整数。如果没有,请阅读直到我设法输入一个数字。
我做了一些研究,发现函数 scanf
实际上在读取正确完成时返回 1,否则返回 0。
所以,我写了这段代码,我不明白为什么这是一个无限循环,在控制台上写“Give an integer”
#include <stdio.h>
int main() {
int a;
int b = 1;
do {
printf("Give an integer\n");
b = scanf("%d", &a);
} while (b == 0);
}
最佳答案
scanf()
的问题在于,当遇到大多数说明符(如 "%d"
)的第一个空格时,它会停止读取,因此它会留在输入中这就是为什么如果你不丢弃这样的空白,再次阅读会导致问题,因为它会在你下次调用它时立即返回。当您按 Enter 或 Return 时,会引入一个强制性空格,'\n'
换行符(或换行).
如果你想读取一个整数并确保你做到了,你可以这样尝试
#include <stdio.h>
#include <stdlib.h>
#include <ctype.h>
int
main(void)
{
long int value; // You can adapt this to use `int'
// but be careful with overflow
char line[100];
while (fgets(line, sizeof(line), stdin) != NULL) {
char *endptr;
value = strtol(line, &endptr, 10);
if ((isspace(*endptr) != 0) && (endptr != line))
break;
}
fprintf(stdout, "%ld\n", value);
return 0;
}
阅读strtol()理解这段代码的手册
您可以按照评论中的建议,从输入中删除空白字符,但恕我直言,这更难,您仍然会遇到 scanf()
的其他问题,例如处理空输入不是直截了当的。
关于c - 阅读直到我设法输入一个整数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42517844/