最近我学了多组输入怎么操作。
多组输入就是有的题目给了一组数据测试后还没结束,还可以继续输入另一组数据测试。
这个核心应该是while循环。对于数字多组输入,条件是scanf返回值不等于EOF,
即
int a=0;
while(scanf("%d",&a)!=EOF){
}
scanf返回值是成功读取的变量个数,如scanf("%d %d",&a,&b)如果成功读取的话返回2;
如果scanf没有成功读取返回EOF,它是文件结束标志(end of file)。
如果成功读取,则不等于EOF循环就会进行,达到多组输入目的。
此外EOF本质是-1。补码是32个1。按位取反后就是0。~是按位取反符号。所以也可以写成
int a=0;
while(~scanf("%d",&a)){
}
当scanf返回EOF时候,~scanf("%d",&a)表示0,条件为0循环结束,这样也可以达到多组输入目的。
按位取反~ 和 !=EOF可任意选一个。
此外还有字符多组输入,需要注意的是消除 \n 。可以用getchar()等
如
#include<stdio.h>
int main()
{
char ch=0;
//当getchar()读取失败或读完 也会返回EOF
while((ch=getchar())!=EOF){
//一次操作完成后用getchar()消除读入的\n,
//这个\n是键盘上敲入一个字符后按了回车形成的 ,会影响后面的继续读入,故要消除
getchar();
}
return 0;
}
//一个字符也可以用scanf读入,这是可以在%c前面加一个空格,或后面加一个\n
//达到消除\n的目的
int a=0;
while(scanf(" %c",&a)!=EOF)
{
}
//或者
while(~scanf("%c\n",&a))
{
}