2016-01-08 26 views
0

這是一個OJ問題。 描述:獲取輸入數據的總和。 輸入:有幾行輸入,每行包含幾個整數,每個整數由一個空格分開。你需要得到每行整數的總和。 輸出:相應行的總和。 樣品輸入:如何擺脫這個「循環」沒有任何輸入指示終止?

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; 
} 

我相信問題出在程序隨時恭候當沒有更多線路輸入時的另一個輸入。但如何解決這個問題? 非常感謝。

+3

使用'的std ::函數getline'在一個循環(),直到它返回'FALSE'。 –

+0

@πάνταῥεῖ抱歉,但我不太明白... – beryllium

+0

也許[this](http://en.cppreference.com/w/cpp/string/basic_string/getline)有幫助。 –

回答

4

您的if (a[i] == EOF)檢查沒有意義。當到達EOF(或發生一些錯誤)時,gets_s不會通過在緩衝區中存儲魔術值來指示此情況,而是通過結果指示它。你可以擺脫這種if情況,並檢查gets_s的結果外循環:

while (gets_s(a)) { 
    ... 
}