2

我遇到了一个问题,一个简单的函数在到达 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() 调用并成功调用,因为屏幕上出现“输入半径”,但没有请求输入,最后 4 条语句被跳过。然后程序简单地返回到 main()。

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

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

4

3 回答 3

2

Visual Studio 2010当我尝试使用on运行您的代码时,它在我的机器上也是如此Windows XP

我设法通过getchar();在调用circle()in之后修复它main

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

**编辑:

当然它会退出,这是因为它会运行到最后main退出应用程序。

于 2012-06-13T09:38:16.607 回答
1

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

Enter radius.

后跟一个新行。然后你可以输入半径并按回车键。你试过吗?

于 2012-06-13T09:38:22.857 回答
1

嗯,它在我的电脑上运行良好。您是否对其进行了调试,它是否真的跳过了这些行?添加

cout << flush;

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

如果您希望它阻止正在执行的程序并等待用户输入,请记住在读取 cin 缓冲区之前也要清理它。

于 2012-06-13T09:38:33.403 回答