2

do /whileループに関する簡単なc++チュートリアルに従っているだけで、チュートリアルに書かれているものを正確にコピーしたようですが、同じ結果は得られません。これは私のコードです:

int main()
{
    int c=0;
    int i=0;
    int str;
    do
    {
        cout << "Enter a num: \n";
        cin >> i;
        c = c + i;
        cout << "Do you wan't to enter another num? y/n: \n";
        cin >> str;

    } while (c < 15);

    cout << "The sum of the numbers are: " << c << endl;


    system("pause");
    return (0);
}

現在、1回の反復の後、ループは入力を再度要求せずに実行され、iの最初の初期入力で合計を計算するだけです。ただし、cout / cinステートメントの2番目のペアを削除すると、プログラムは正常に動作します。

誰かが私のエラーを見つけてもらえますか?ありがとう!

4

4 に答える 4

4

で文字列を読み取った後もcin >> str;、入力バッファに改行が残っています。次の反復で実行すると、数字を入力せずにcin >> i;押したように改行が読み取られるenterため、何も入力するのを待ちません。

cin.ignore(100, '\n');通常の治療法は、文字列を読んだ後のようなものを置くことです。これ100は多かれ少なかれ恣意的です-スキップする文字数を制限するだけです。

于 2012-05-29T15:31:37.713 に答える
1

...そして私のための私の最初の初期入力で合計を計算するだけです...

を読んでいて使用していないため、これは予想される動作ですstr。入力した場合i >= 15、ループは中断する必要があります。それ以外の場合は続行します。

于 2012-05-29T15:31:57.000 に答える
1

変更した場合

int str;

char str;

ループは意図したとおりに機能します(Visual Studio 2010でテスト済み)。ただし、完了したと言われているので、
おそらくチェックする必要があります。str == 'n'

于 2012-05-29T15:41:24.363 に答える
0

私はあなたがこのことを望んでいたと思います

この場合、合計cは15未満になり、ユーザーがyを入力すると合計が継続されます。

#include<iostream>
using namespace std;
int main()
{
    int c=0;
    int i=0;
    char str;
    do
    {
        cout << "Enter a num: \n";
        cin >> i;
        c = c + i;
        cout << "Do you wan't to enter another num? y/n: \n";
        cin >> str;

    } while (c < 15 && str=='y');

    cout << "The sum of the numbers are: " << c << endl;
    return 0;
}
于 2020-09-15T10:18:58.030 に答える