2012-05-29 91 views
2

我只是遵循do/while循環上的一個簡單的C++教程,而且我似乎已經複製了本教程中編寫的內容,但是我並沒有得到相同的結果。這是我的代碼:while while循環不能有兩個cin語句嗎?

int main() 
{ 
    int c=0; 
    int i=0; 
    int str; 
    do 
    { 
     cout << "Enter a num: \n"; 
     cin >> i; 
     c = c + i; 
     cout << "Do you wan't to enter another num? y/n: \n"; 
     cin >> str; 

    } while (c < 15); 

    cout << "The sum of the numbers are: " << c << endl; 


    system("pause"); 
    return (0); 
} 

眼下,經過1次迭代,循環只運行,而無需再次詢問我的投入,只計算與我的第一個初始輸入的總和我。 但是,如果我刪除第二對cout/cin語句,該程序工作正常..

有人可以發現我的錯誤嗎?謝謝!

+5

這是什麼教程?它完全忽略了'y/n'回答的內容,並且只在總和小於15時迭代 –

+1

我相信'str'應該是'std :: string'的類型。 – maverik

+1

@maverik,更像是'char',如果它只是y/n。 – chris

回答

1

如果更改

int str; 

char str; 

你的循環工作你似乎打算(在Visual Studio 2010測試)。
雖然,你也應該檢查str == 'n',因爲他們告訴你他們已經完成了。

+0

是的..完全錯過了。謝謝! – jerbotron

4

當您使用cin >> str;讀取字符串後,輸入緩衝區中仍然有一條新線。當您在下一次迭代中執行cin >> i;時,它會讀取換行符,就像您剛剛按輸入而不輸入數字一樣,因此它不會等待您輸入任何內容。

通常的治療方法是在讀取字符串後加入類似cin.ignore(100, '\n');的東西。 100或多或少是任意的 - 它僅限制它將跳過的字符數。

+1

如果他們想要跳過所有內容直到換行,那麼可以使用'std :: numeric_limits :: max()'而不是'100'。 – Fanael

+0

@Fanael:你可以,有時它是有道理的。但這並不像很多人想象的那麼頻繁 - 如果你真的得到了很多意想不到的投入,通常停下來告訴用戶這個問題比浪費很長時間更有意義當出現明顯問題時,需要大量的投入。 –

1

...,只計算與我的第一個初始輸入的總和我...

這是預期的行爲,因爲你只是讀str,而不是使用它。如果輸入i >= 15,則循環必須中斷,否則繼續。