2015-01-10 4 views
0
void firstSentence(void){ 
    string incorrectSentence; 
    string correctSentence = "I have bought a new car"; 
    cout << "Your sentence is: I have buy a new car" << endl; 
    cout << "Try to correct it: "; 
    cin >> incorrectSentence; 
    if(incorrectSentence == correctSentence){ 
     cout << "Goosh. Your great. You've done it perfectly."; 
    } 
    else{ 
     firstSentence(); 
    } 
} 

그건 내 프로그램에서 전화하려고합니다. 그러나 나는 혼자 해결책을 찾을 수 없기 때문에 조금 화가났다. 그것이하는 것은 "if 문"의 조건이 참이면 내 결과가 예상 한 것과 다르다는 것입니다. 5 번 반복되는 이유는 무엇입니까?

가 정확히 5 번 반복 왜 그것이 작동하지 않는 이유는 무엇, 무엇을 거기에가는거야 .. 나는 새 차를 구입해야

+1

코드를 단계별 실행할 때 디버거에서 알려주는 것은 무엇입니까? –

+0

C++에서'(void)'가 필요하지 않습니다 –

+0

무엇을 입력 했습니까? –

답변

6

:. 출력은 5 번이 문제를 해결해야합니다 귀하의 문장은 "반복인가? 이 :

cin >> incorrectSentence; 

라인 만 공백으로 구분 된 토큰을 읽지 않는 입력이 문장의 나머지 입력에 남아있는 동안 처음은, "I"을 읽을 것을 의미, 올바른 문장 인 경우. 이 프로그램은 "I""I have bought a new car", 루프 및 두 번째로 "have" 번 읽습니다. 이것은 올바른 문장과 동일하지 않으므로 다시 반복되고 "bought"을 읽습니다. 이 작업은 스트림에서 모든 내용을 읽을 때까지 계속됩니다.이 때 지점 cin >> incorrectSentence;이 다시 차단됩니다.

용액 라인을 판독

getline(cin, incorrectSentence); 

...를 사용하는 것이다.

+0

'cin.getline (incorrectSentence);','getline (cin, incorrectSentence);'. 'std :: getline'은''헤더의 자유 함수입니다. 'std :: istream :: getline' ('cin.getline'에서와 같이)은 원시 버퍼와 함께 작동합니다. – Wintermute

+0

고마워요, 작동합니다;) –

관련 문제