|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
我只能说是我基础太差完全考虑不周了吧
题目要求
多组数据,请处理到输入末尾。
对于每组数据:一行两个整数a,b用空格分隔。
对于每组数据,输出一行一个整数,表示a+b的值。(最大100000行)
如上,然后我的第一版代码:
- #include <stdio.h>
- int main() {
- int T;
- int a, b, S;
- T = 0;
- while (T < 100000) {
- T++;
- scanf("%d %d", &a, &b);
- S = a + b;
- printf("%d\n", S);
- }
复制代码
Then,我发现一个大问题:
这个程序的输出无法手动停止!
所以我去查找了一下,找到了一个叫EOF的东西,然后我尝试把他加入到这次小测试里。。。
如此,二版代码
- #include <stdio.h>
- #define MAX 100000
- int main() {
- int T, a, b, S;
- T = 0;
- while (T != EOF) {
- T++;
- scanf("%d %d", &a, &b);
- S = a + b;
- printf("%d\n", S);
- }
- return 0;
- }
复制代码
然后超时了,运行超时了(1200ms),当我看见有的大佬才100ms完成的时候我震惊了
百思不得其解,来求助了QvQ
本帖最后由 jhq999 于 2021-10-14 12:02 编辑
- #include<stdio.h>
- int main(){
- int T,a,b,S;
- for (T=0;T <100000;T++){
-
- if(0== scanf("%d %d",&a,&b)) break;\\输入格式错误就退出
- S=a+b;
- printf("%d\n",S);
- }
- return 0;
- }
复制代码
不明白为什么他们愿意用EOF判断?除了字符串和字符,接受数字我这个直接输入一个英文字母就退出循环,他这个还得分系统CTRL+Z或CTRL+D
转载:
1. scanf 函数是有返回值的,它的返回值可以分成三种情况
1) 正整数,表示正确输入参数的个数。例如执行 scanf("%d %d", &a, &b);
如果用户输入"3 4",可以正确输入,返回2(正确输入了两个变量);
如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。
2) 0,表示用户的输入不匹配,无法正确输入任何值。如上例,用户如果输入",3 4",返回0。
3) EOF,这是在stdio.h里面定义的常量(通常值为-1),表示输入流已经结束。在Windows下,用户按下CTRL+Z(会看到一个^Z字符)再按下回车(可能需要重复2次),就表示输入结束;Linux/Unix下使用CTRL+D表示输入结束。
|
|