2013-04-13 45 views
4

我在使此程序正常工作時遇到問題。該程序要求提出問題,然後將該問題寫入文件。然後它會問你是否要輸入另一個問題。如果你點擊'1',它會循環並要求你輸入另一個問題。程序本身運行和關閉沒有任何問題。問題是無論我輸入多少個問題,它只會寫出第一個要提交的問題。其餘部分由空行代替。如果我關閉程序並重新運行它,它將再次只寫入一行。我確定cin.ignore與它有關,但我無法弄清楚如何解決它。請幫忙。寫入循環中的文件時遇到問題

#include <iostream> 
#include <fstream> 
#include <limits> 
#include <string> 

using namespace std; 

int main() 
{ 
string question; 
int x; 


ofstream a_file("test.txt",ios::app); 
    do 
    { 
     cout<<"Enter a question:\n\n"; 
     getline(cin,question); 
     a_file<<question<<"\n"; 
     cin.clear(); 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
     cout<<"Would you like to enter another question?\n"; 
     cout<<"1 for yes. 2 for no: "; 
     cin>>x; 

    } 
    while (x!=2); 

a_file.close(); 
cout<<"\nYour submition has been saved. Have a nice day!\n"; 
cout<<"Press enter to close the program."; 
cin.ignore(); 
cin.get(); 

} 

回答

3

與代碼相關的問題是在這裏:

cin.ignore(numeric_limits<streamsize>::max(), '\n'); 

會忽略一整行。那麼當您嘗試使用getline來獲取下一行時,您在while循環內沒有任何內容。 (巴勃羅·如指出EDIT)

do 
{ 
    if (question.length() >0) 
     cin.ignore(numeric_limits<streamsize>::max(), '\n'); 
    cin.clear(); 
    cout<<"Enter a question:\n\n"; 
    getline(cin,question); 
    a_file<<question<<"\n"; 
    cout<<"Would you like to enter another question?\n"; 
    cout<<"1 for yes. 2 for no: "; 
    cin>>x; 
}while (x!=2); 

我想這弄不好會的gcc 4.5.3,它的工作以及預期:

可以解決這個問題如下。應該存在更優雅的修復。

+0

它只是我的編譯器,或者當我設置選項來詢問您的代碼的另一個問題時,它會跳過它並再次丟棄菜單? – Lemurr

+0

@PabloLemurr對不起,發佈了錯誤的代碼,只是更新了帖子。由於第一行被忽略,因此在運行時按Enter鍵。難以修復 – taocp

+1

有一個修復...對於此修復:D 'if(question.length()> 0)cin.ignore(numeric_limits :: max(),'\ n');' 孩子們,不要在家裏嘗試。 – Lemurr