c++ - 如何在没有任何输入指示终止的情况下摆脱这个 "loop"?

标签 c++

这是一个 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/

相关文章:

python - Cython,关于 vector (大小)构造函数的混淆

c# - 如何将两个非托管 C++ 函数包装到两个托管 C# 函数中?

c++ - 保存一个对象的变量,然后能够用这些变量初始化另一个对象

C++ 运算符重载 : implementing + with +=

c++ - opengL画一条线

c++ - 跳转到 C++ 第 5 章问题 7

c++ - IP 标志的 Don't Fragment Bit 在哪里使用?

c++ - Visual Studio 2015 中没有显示 GTK

c++ - 为什么 cudaMalloc() 使用指向指针的指针?

c++ - 如何限制 while 循环运行的次数? C++