有时候刷题经常遇到如下这种输入:
1
2
3
4
......
就是不知道什么时候结束输入,反正就是一直在输入,这个时候怎么写呢?我们知道
scanf()的返回值是成功赋值的变量数量, 发生错误时返回EOF.
看如下代码:
#include<stdio.h>
int main() {
int a, b, c, d;
int e = scanf("%d%d%d%d", &a, &b, &c, &d);
printf("a=%d b=%d c=%d d=%d\n", a, b, c, d);
printf("e=%d\n", e);
}
运行结果:
发现scanf()的返回值是成功输入的个数,那么如果所有变量都没输入成功返回0,但是写成
while(scanf()!=0)能实现上面的那种输入方式吗?答案是不能。 因为返回0只是代表没有输入成功或者输入数据有误,而输入结束是认为手动控制的。注意,输入结束是人为控制的,不是数据出错导致输入结束!!因此不能。那么怎么做呢?有两种做法:
第一种做法:
while(scanf()!=EOF),EOF是什么?,EOF是文件结束符:
它的值是-1.则说明scanf()的返回值是大于等于-1的。 当按下ctrl+z或者ctrl+d
第二种
while(~scanf()),这是什么意思呢?我们知道EOF等于-1,补码形式是全1,对它按位取反得到0的补码,因此这种方式也可以实现。