我遇到一个问题,一个简单的函数在到达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 回答
好吧,它在我的电脑上工作正常 . 你调试它并确实跳过这些线吗?加
刷新缓冲区并在屏幕上查看结果的结束 .
如果要阻止执行程序并等待用户输入,请记住在读取之前清理cin缓冲区 .
当我尝试在
Windows XP
上使用Visual Studio 2010
运行代码时,它在我的机器上也是如此 .我设法通过在
main
中调用circle()
之后输入getchar();
来修复它 .不知道为什么会发生这种情况,希望有人可以对此有所了解 .
**编辑:
当然它是'll quit, it',因为它会运行到退出应用程序
main
的末尾 .cin
不请求输入,只是从stdin读取 . 所以你的程序会打印出来接着是一条新线 . 然后你可以输入半径并点击返回 . 你试过吗?