2015-09-07 61 views
0

我可以讓文件保存正確,但我似乎無法得到多個單詞寫入.txt,就像我輸入「Hi purple」它只是寫「Hi」,在這裏是代碼如何在C++中打印多個單詞

#include <cstdlib> 
#include <iostream> 
#include <fstream> 
#include <string> 

using namespace std; 

int main() 
{ 
    system("color F0"); 
    string name0;   
    cout << "Please enter a file name, no spaces/special characters" << endl; 
    cin >> name0; 
    name0 = name0+".txt"; 
    system("cls"); 
    cout << "   FISHSOFT" << endl; 
    cout << "The best text editor in the world" << endl << endl; 
    string text; 
    cin >> text; 
    ofstream myfile; 
    myfile.open (name0.c_str() , ios::out | ios::trunc); 
    myfile << text; 
    myfile.close(); 
    system("PAUSE"); 
    return 0; 
} 

回答

3

使用std::getline來讀取包括空格在內的整行輸入。

2

std :: cin能夠一次獲得多個參數。

這意味着你可以寫:

std::cin >> name0 >> name1 >> name2; 
// input: a1 a2 a3 
// make: name0: a1, name1: a2, name3:a3 

默認情況下,空間參數之間的分隔符。

爲了避免這種情況,你可以使用函數getline:

std::getline(std::cin, name0); 
+1

它是'std :: getline',帶有小寫字母L.並且該函數不返回字符串,而是接受字符串引用。 –

+0

謝謝,解決了。 –

2

cin >> text;從輸入流中讀取一個空格分隔令牌。一個單詞出現在一個單詞中。

std::getline(cin, text);會讀取整行。閱讀不止這些都是棘手的,但通常是圍繞多個調用getline的循環。

建議:在發佈問題前,節省自己的時間並啓動IDE的調試器,查看代碼中發生了什麼。幾乎總是更快,如果不是,你可以做出更好,更緊的問題。

+0

我對使用調試器的建議表示同情,但在這種特殊情況下它將如何起作用? –

+0

讀取cin後的文本內容,看看它不是全部輸入的內容。快速消除來自爭用的輸出錯誤,並且OP可能使得空白與cin停止讀取輸入之間的連接成爲可能。之後,快速瀏覽cin文檔,或者搜索「爲什麼cin只能讀一個字?」應該回答這個問題。對於我谷歌返回兩個有用的SO點擊在頂部。 – user4581301

+0

好吧,如果我正確地閱讀了這個問題,那麼OP會正確地認識到只有一個單詞在'text'或'name0'字符串中結束,但是不知道爲什麼。在這種情況下,閱讀文檔比使用調試器更重要。 –

1

有兩種方法可以獲得帶空格和特殊字符的字符串。

  1. cin.getline(name);
  2. gets(name);

希望這會符合您的目的。