我遇到一个问题,即当一个简单的函数到达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()会意外退出。
答案 0 :(得分:2)
当我尝试使用Visual Studio 2010
上的Windows XP
运行您的代码时,我的计算机上也是如此。
我设法通过在getchar();
中调用circle()
之后添加main
来解决此问题。
不确定为什么会发生这种情况,希望有人可以对此有所了解。
**编辑:
当然它会退出,因为它会一直运行到退出应用程序的main
的末尾。
答案 1 :(得分:1)
cin
不请求输入,只是从stdin读取。所以你的程序会打印出来
Enter radius.
后面是一个新行。然后你可以输入半径并点击返回。你试过吗?
答案 2 :(得分:1)
嗯,它在我的电脑上工作正常。你调试它并确实跳过这些线吗?添加
cout << flush;
刷新缓冲区并在屏幕上查看结果的结束。
如果你想要阻止执行程序并等待用户的输入,请记得在读取之前清理cin缓冲区。