2013-04-13 4 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 회 돌이 안에 아무 것도 나타나지 않습니다. 다음과 같이

당신은이 문제를 해결할 수 있습니다 (편집 파블로에 의해 지적)

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); 

나는이 수정 4.5.3 gcc를합니다했는데, 예상대로 잘했다. 좀 더 우아한 수정이 있어야합니다.

+0

그냥 제 컴파일러입니까, 아니면 코드에 다른 질문을하기 위해 옵션을 설정하면 건너 뛰고 메뉴가 다시 나타납니다? – Lemurr

+0

@PabloLemurr 죄송합니다, 방금 게시를 업데이 트하는 잘못된 코드를 게시했습니다. 첫 번째 줄을 무시한 후 Enter 키를 누릅니다. 못생긴 수정 – taocp

+1

수정이 있습니다 ... D 'if (question.length()> 0) cin.ignore (numeric_limits :: max(), '\ n');' 어린이, 집에서 이것을 시도하지 마십시오. – Lemurr

관련 문제