2017-06-27 244 views
1

我一直試圖進入C++,但我甚至無法獲得最簡單的編程來爲我工作。C++字符串在多行上打印

while(true) { 
    cout << "." 
    string in; 
    cin >> in; 

    cout << "!" << in 
} 

我希望得到:

.1 
!1 
.1 2 
!1 2 

我實際上得到:

.1 
!1 
.1 2 
!1.2 
+0

雖然這不是真正的代碼,這是很明顯的你的意思是前兩個'cout'語句是外循環。做到這一點,並改變'cout << ">「<< cmd;'到'cout << ">」<< cmd <<'\ n';'你就完成了。 –

+0

@VaibhavBajaj完美。謝謝。我會盡量讓它適應以後的工作。 :) –

回答

1

CIN是從標準輸入,這可能不是你所期望的所有的行爲方式讀取數據流。提取操作符>>從cin中讀取,直到達到空白爲止,因此cin >> cmd僅將cmd設置爲等於命令中的第一個單詞。剩下的話仍然在CIN,所以程序打印

> test 

再次繞一圈後,會提示輸入,並從CIN允許您添加別的東西來流,而不是讀test2

如果要讀取整行,請使用getline。

#include <string> 
using std::string; 
#include <iostream> 
using std::cin; using std::cout; using std::getline; 

int main() { 
    while (true) { 
    cout << "\n\n"; 
    cout << "[CMD] > "; 
    string cmd; 
    // Store the next line, rather than the next word, in cmd 
    getline(cin, cmd); 

    cout << "> " << cmd; 
    } 
} 

此執行你所期望的:

[CMD] > test 
> test 

[CMD] > test test2 
> test test2 

[CMD] > 
+1

正是我以後。謝謝! –

1

如果你想讀整行,然後格式化輸入直接std::cin不是要走的路。改爲使用std::getline

大致是這樣的:

#include <string> 
#include <iostream> 

int main() { 
    while(true) { 
    std::cout << "." 
    std::string in; 
    getline(std::cin, in); 

    std::cout << "!" << in << '\n'; 
    } 
}