2015-07-28 58 views
-1
#include <cmath> 
#include <cstdio> 
#include <vector> 
#include <iostream> 
#include <algorithm> 
using namespace std; 


int main() { 
    int T; 
    cin >> T; 
    char input[1000]; 
    for(int i=0;i<T;i++) 
    { 
     cin.getline(input,sizeof(input)); 
     cout << input << "\n"; 
    } 
    return 0; 
} 

我目前有問題使用getline獲取字符串輸入,但它似乎只適用於短行。這是我的輸入和輸出:如何在C++中用空格輸入長字符串?

輸入:

3我能有咖啡一個大容器,現在我可以喝一大 容器,現在現在,我希望我能記得PI尤里卡 哭了偉大的發明家聖誕布丁聖誕餡餅的 問題非常中心

輸出:

我能有咖啡一個大容器,現在我可以喝一大 容器現在

它不保存最後一行,爲什麼?

+3

爲什麼不使用''string''而不是''char []''? – alifirat

+0

你的代碼中的T是什麼? –

+0

T是測試用例的數量 –

回答

0

嘗試是這樣的

while(cin.getline(input,sizeof(input))){ 
} 
3

你可以用這種方式做到這一點,利用string代替char []

int main() { 
    int T; 
    cin >> T; 
    string input; 
    for(int i=0;i<T;i++) 
    { 
     std::getline(std::cin,input); 
     cout << input << endl; 
    } 
    return 0; 
} 

檢查代碼如下測試:

輸入:

3 Can I have a large container of coffee right now Can I have a large container of tea right now Now I wish I could recollect pi Eureka cried the great inventor Christmas Pudding Christmas Pie Is the problems very center 

輸出:

3 Can I have a large container of coffee right now Can I have a large container of tea right now Now I wish I could recollect pi Eureka cried the great inventor Christmas Pudding Christmas Pie Is the problems very center 
+0

不是,它仍然沒有顯示最後一行。 –

+0

當我測試代碼時,它顯示最後一行... – alifirat

0

嘗試:

int main() { 
    int T; 
    cin >> T; 
    std::string temp; 
    std::string input; 
    for(int i=0;i<T;i++) 
    { 
     while(std::getline(std::cin,temp)) { 
     input += temp; 
    } 
    std::cout << input << endl; 
    return 0; 
} 
1

你的問題是第一個輸入操作:

cin >> T; 

這讀取一個數字,將其作爲T中的一個整數,但葉子流中的換行符。現在循環將讀取三行,但第一行將是一個空行。

您可以通過多種方式解決這個問題,最簡單的就是剛剛丟棄換行符獲取號碼後:

cin >> T; 
cin.getline(input, sizeof input); 

一個更好的辦法將是檢查文件的末尾,而不是獲取的行數提前。並使用std::string而不是像其他人所暗示的char數組。

相關問題