在一行中用scanf输入多个数据
在scanf中输入一行数据中间空空格隔开或者制表符隔开,然后采用循环读入的方法可以实现一行数据的读取。
例子
输入格式:
输入在一行中给出一系列正整数,其间以空格分隔。当读到零或负整数时,表示输入结束,该数字不要处理。
输出格式:
在一行中输出正整数序列中奇数的和。
#include <stdio.h>
int main(){
int sum=0, n=-1;
while(1){
scanf("%d", &n);
if(n<=0){
break;
}
if(n%2==1){
sum += n;
}
}
printf("%d\n", sum);
return 0;
}
**这里口头描述一下,输入2 5 3 7 9 -1或者
2 5 3 7 1
-1
这两种方式效果相同。
这里我用分步调试测试过,当运行到scanf时,进入命令行可以输入上述形式,
在按下回车之前这些数据都是存在于键盘缓冲区,回车之后就如stdio缓冲区,但是如程序格式表示每次仅读取一个整形数据,遇到空格、回车(第二种输入方式)、制表符默认当前数据结束,所以说不管每个数据是个位数还是几千几万的数,scanf都会在扫描到上述三种数据时认为当前数据结束。
再次循环开始后,因为scanf扫描到stdio缓冲区中仍然存在数据,就不会再次运行到这一条语句时阻塞