这是一个 OJ 问题。 描述:获取输入数据的总和。 Input: 有几行输入,每行包含几个整数,每个整数之间用一个空格分隔。您需要获取每行整数的总和。 输出:对应行的总和。 示例输入:
100 200 4
45 45
示例输出:
304
90
而我的代码如下:
//time limit exceeded
#include<iostream>
#include<cstring>
#include<stdio.h>
#include<math.h>
using namespace std;
int main(){
char a[500];
while (true){
gets_s(a);
int len = strlen(a), sum = 0;
for (int i = 0; i < len + 1; i++){
if (a[i] == EOF)return 0;
if (a[i] == ' ' || a[i] == '\0'){
for (int j = i - 1; a[j] != ' '&&j >= 0; j--){
sum += (a[j] - '0')*pow(10, i - j - 1);
}
if (a[i] == '\0')break;
}
}
cout << sum << endl;
}
return 0;
}
我认为问题在于程序在没有更多行可输入时继续等待另一个输入。但是如何解决呢? 非常感谢。
最佳答案
您的 if (a[i] == EOF)
检查没有意义。当到达 EOF(或发生某些错误)时,gets_s
不会通过在缓冲区内存储一个魔法值来指示这一点,而是通过结果来指示。你可以摆脱这个 if
条件,并在外循环中检查 gets_s
的结果:
while (gets_s(a)) {
...
}
关于c++ - 如何在没有任何输入指示终止的情况下摆脱这个 "loop"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34676774/