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を使用してコードを実行しようとすると、私のマシンでも同じように動作しますWindows XP

getchar();の呼び出しの後に置くことで、なんとか修正できましcircle()main

なぜこれが起こっているのかわからない、うまくいけば誰かがそれにもう少し光を当てることができます。

**編集:

もちろん、それは終了します、それはそれが最後まで実行されてmainアプリを終了するからです。

于 2012-06-13T09:38:16.607 に答える
1

cin入力を要求しませんが、stdinから読み取るだけです。だからあなたはプログラムが印刷されます

Enter radius.

新しい行が続きます。次に、半径を入力してリターンキーを押すだけです。やってみましたか?

于 2012-06-13T09:38:22.857 に答える
1

まあ、それは私のコンピュータでうまく動作します。あなたはそれをデバッグしましたか、そしてそれは本当にそれらの行をスキップしますか?追加

cout << flush;

バッファをフラッシュし、画面に結果を表示するための終了。

実行中のプログラムをブロックしてユーザーからの入力を待つ場合は、cinバッファーから読み取る前にcinバッファーをクリーンアップすることも忘れないでください。

于 2012-06-13T09:38:33.403 に答える