【发布时间】:2017-03-04 09:36:44
【问题描述】:
当scanf 成功转换为请求格式的输入字符(在本例中为十进制整数"%d")时,它返回一个1,表示“转换成功”。
好吧,恐怕我没有正确理解它。
我想使用此功能立即过滤输入:如果输入不是整数(正或负),则请求另一个输入。
#include<stdio.h>
#include<stdlib.h>
int main(){
int x;
printf("\nThis function reads an integer\n");
while(scanf("%d", &x) != 1){
printf("Please type an integer:\n");
scanf("%d", &x);
}
printf("\n%d is really an integer!\n", x);
return 0;
}
但在这种情况下,输入2.15,scanf 只读取数字2,然后成功关闭循环。
【问题讨论】:
-
为什么要用2次scanf?
-
@tilz0R 不是第一个 (scanf("%d", x) == 1) 逻辑条件吗?
-
为什么还有另一个?首先 scanf 已经将数据放到你的 X 中了。
-
OP 应该注意到的真实情况是,如果对
scanf()的第一次调用失败,那么第二次调用也将失败。这是因为当“输入/转换”失败时,不再输入可用字符,因此当第二次调用scanf()时,相同的失败字符仍在输入流中
标签: c while-loop scanf