2015-12-21 92 views
0

我已閱讀「可能已經有你的答案的問題」的答案,但它沒有幫助我。寫入文件,編譯,創建文件,但不寫

我想我的問題有一個快速的解決方案。

我想寫其中

  1. 用戶輸入他們想要創建的文件名的程序。

然後

  • 在同一行他們輸入的整數量=新創建的txt文件的文本的行數。

  • 在新行中,用戶輸入文本的第一行,在新行中輸入下一行,等等。

  • 並將所有這些行保存到創建的文件中。

  • 例如file.txt 3

    bhjudshsu 565 jdd 
    hcxjs 
    jdckisa jsdjs 
    

    開放名爲file.txt我應該看到上述三行的文本文件之後。

    這裏是我的代碼示例:

    #include<iostream> 
    #include<string> 
    #include<fstream> 
    
    using namespace std; 
    
    int main() 
    { 
        int amount; 
        string fileName, line; 
    
        ofstream start; 
    
        cin>>fileName>>amount; 
    
        ofstream out(fileName.c_str()); 
    
        for(int i=0; i<amount; i++) 
        { 
         getline(cin, line); 
         start<<line<<endl;  
        } 
        start.flush(); 
        start.close(); 
    
        return 0; 
    } 
    

    的問題是,該文件被創建,但它是空的。

    此外,如果我輸入file.txt 3程序關閉後,我只輸入兩行。

    你能告訴我我做錯了什麼嗎?

    +0

    我投票關閉這一問題作爲題外話,因爲它涉及到一個簡單的和不尋常的編碼錯誤,不太可能幫助未來的讀者。 – Beta

    +0

    兩個注意事項:1)流輸入('cin >> ...')和'getline'不能很好地協同工作,所以你必須做出讓步,2)最好是獨立開發新的功能*儘可能 - 你應該得到**用戶輸入**和**文件輸出**完美工作,然後再嘗試合併它們。 – Beta

    回答

    1

    除了Beta的回答,cin >>會在用戶按下回車鍵時在緩衝區中留下換行符。 getline()讀取此用戶已按下輸入以「跳過」輸入。

    在使用getline()之前,可以使用cin.ignore()去除這些額外的字符。

    #include<iostream> 
    #include<string> 
    #include<fstream> 
    
    using namespace std; 
    
    int main() 
    { 
        int amount; 
        string fileName, line; 
        cin >> fileName >> amount; 
        ofstream start(fileName.c_str()); 
    
        for(int i = 0; i < amount; i++) 
        { 
         cin.ignore(); 
         getline(cin, line); 
         start << line << endl; 
        } 
    
        start.flush(); 
        start.close(); 
        return 0; 
    } 
    
    +1

    是的,實際上,在開始糾正之後,我仍然只能輸入兩行 – Bilbo

    +0

    只有在添加cin.ignore()之後;一切都很好。謝謝! – Bilbo

    3

    你有兩個ostreams,startout。您將out附加到文件(並且不寫任何內容),並寫入start(不附加任何內容)。