2012-06-13 88 views
2

我有一個問題,當一個簡單的函數似乎終止時,它達到了std :: cin請求。編譯器不會發出警告或錯誤,並且不會發生運行時錯誤,程序會簡單地回退到主菜單。新手奮鬥與std :: cin

段:

#include <iostream> 
#include <math.h> 

using namespace std; 

void circle() 
{ 
    float radius = 0.0f, diameter = 0.0f, circumference = 0.0f, area = 0.0f; 
    const float pi = 3.14f; 

    cout << "Enter radius." << endl; 
    cin >> radius; 
    cout << "Radius: " << radius << endl; 
    cout << "Diameter: " << 2*radius << endl; 
    cout << "Cirumference: " << 2*pi*radius << endl; 
    cout << "Area: " << pi * pow(radius, 2) << endl; 
} 

的功能從主稱爲(),併成功地稱爲「輸入半徑」出現在屏幕上,但沒有請求輸入最後4條語句被跳過。程序然後簡單地返回到main()。

cin也沒有錯誤(並且在main()函數中播放時繼續工作),所以我不認爲它只是讀取流中的壞字符。

我只是不知道爲什麼circle()意外退出。

+0

告訴我們'main'的代碼 –

+0

好的請求。我從來沒有添加它,因爲我當時認爲它不相關。我錯了。 – Mosseman

回答

1

那麼,它在我的電腦上正常工作。你有沒有調試它,它真的跳過這些線?添加

cout << flush; 

結束刷新緩衝區並在屏幕上查看結果。

如果您希望它阻止正在執行的程序並等待用戶輸入,請記住在從中讀取cin緩衝區之前先清除它。

+0

這是我的問題!我從來沒有用'cin'緩衝區清理。 'main()'有另一個'cin'。這並不是我想到的問題,因此我從未包含'main()'的內容。 Derp。謝謝您的幫助! – Mosseman

2

當我嘗試使用Visual Studio 2010Windows XP上運行代碼時,它在我的機器上也是如此。

我在main撥打電話circle()後加入getchar();來解決問題。

不知道爲什麼會發生這種情況,希望有人可以更多地瞭解它。

**編輯:

當然會不幹,那是因爲它會運行的main末可以退出應用程序。

1

cin不請求輸入,只是從標準輸入讀取。所以你的程序會打印出來

Enter radius. 

後面跟着一個換行符。然後你可以輸入半徑並返回。你嘗試過嗎?