新手与std :: cin斗争

时间:2012-06-13 09:30:29

标签: c++ 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;
}

该函数从main()调用并成功调用,因为屏幕上出现“Enter radius”,但没有请求输入,并且跳过最后4个语句。然后程序只返回main()。

cin也没有错误(并且在main()函数中播放时继续工作)所以我不认为它只是在流中读取一个坏字符。

我无法弄清楚为什么circle()会意外退出。

3 个答案:

答案 0 :(得分:2)

当我尝试使用Visual Studio 2010上的Windows XP运行您的代码时,我的计算机上也是如此。

我设法通过在getchar();中调用circle()之后添加main来解决此问题。

不确定为什么会发生这种情况,希望有人可以对此有所了解。

**编辑:

当然它会退出,因为它会一直运行到退出应用程序的main的末尾。

答案 1 :(得分:1)

cin不请求输入,只是从stdin读取。所以你的程序会打印出来

Enter radius.

后面是一个新行。然后你可以输入半径并点击返回。你试过吗?

答案 2 :(得分:1)

嗯,它在我的电脑上工作正常。你调试它并确实跳过这些线吗?添加

cout << flush;

刷新缓冲区并在屏幕上查看结果的结束。

如果你想要阻止执行程序并等待用户的输入,请记得在读取之前清理cin缓冲区。