首页 文章

新手与std :: cin斗争

提问于
浏览
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()调用并成功调用,因为屏幕上出现“Enter radius”,但没有请求输入,并且跳过最后4个语句 . 然后程序只返回main() .

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

我只是想不通为什么circle()意外退出 .

3 回答

  • 1

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

    cout << flush;
    

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

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

  • 1

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

    我设法通过在 main 中调用 circle() 之后输入 getchar(); 来修复它 .

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

    **编辑:

    当然它是'll quit, it',因为它会运行到退出应用程序 main 的末尾 .

  • 2

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

    Enter radius.
    

    接着是一条新线 . 然后你可以输入半径并点击返回 . 你试过吗?

相关问题