1

C++クラスの割り当てを行っています。この割り当てでは、cinから数値を読み取り、それらを合計して、whileループを使用して0が入力されたときに停止するプログラムを作成する必要があります。

私はコードを書き、必要な結果を得ました。しかし、結果を再印刷し続けるwhileループで立ち往生しています。結果を一度印刷した後、このループを終了するためのアドバイスを誰かに教えてもらえますか?

これが私のコードです:

int main ()
{
int i(1), sum(0);
int sum2(0);
const int max(10);

cout << "Enter numbers, one per line. Enter 0 to end:" << endl;

while (i!=0)
{
    cin >> i; 
    sum += i; //add current value of i to sum
    sum2 += 1;
}
while (i==0)
{   
    if (sum < 100) // If total is less than 100
        cout << "Thank you. The total was " << sum << endl 
                 << "The total number of inputs reads: " << sum2 << endl
                 << "The total is less than 100." << endl ;
    else // Else total is greater than 100
            cout << "Thank you. The total was " << sum << endl 
                 << "The total number of inputs reads: " << sum2 << endl 
                 << "The total is greater than 100." << endl ;
}
} //End of Int Main

うまくいけば、それはうまくいきました。申し訳ありませんが、各行に番号を付けて投稿する方法がわかりません。また、while(i == 0)をifステートメントif(i == 0)に変更しようとしましたが、0を入力するとプログラムが閉じます。誰かが有益なアドバイスを持っていますか?私はそれをお願い申し上げます。^ _ ^

更新:申し訳ありませんが、入力の数を追跡するループカウンター、合計値が100未満か大きいかを判断するコメント、および合計値を判断するステートメントも含める必要があることを忘れました。入力。これが、最後にifelseステートメントがある理由です。無限ループの原因であることがわかったので、最後のwhileステートメントを取り出してみましたが、そうしても結果が表示されません。コードを次のように変更しました。

int main ()
{
    int i(1), sum(0);
    int sum2(0);
    const int max(10);

cout << "Enter numbers, one per line. Enter 0 to end:" << endl;

    while (i!=0)
    {
        cin >> i; 
        sum += i; //add current value of i to sum
        sum2 += 1;
    }   
if (sum < 100) // If total is less than 100
            cout << "Thank you. The total was " << sum << endl 
                     << "The total number of inputs reads: " << sum2 << endl
                     << "The total is less than 100." << endl ;
        else // Else total is greater than 100
                cout << "Thank you. The total was " << sum << endl 
                     << "The total number of inputs reads: " << sum2 << endl 
                     << "The total is greater than 100." << endl ;

} //End of Int Main

私の出力は

Enter numbers, one per line. Enter 0 to end:
7
8
6
5
5
9
8
0
Thank you. The total was 48.
The total number of inputs read: 8
The total is less than 100.
4

3 に答える 3

2

i0最初のループを終了した後は、スタックしたままで、変更されることはありません。別のループを使用する代わりに、while後で結果を出力するだけです。

于 2013-01-25T23:19:16.273 に答える
1

を削除しwhile (i==0)ます。それは常に真実です。

于 2013-01-25T23:19:17.337 に答える
1

あなたの問題はあなたwhile loopがループしているあなたの2番目ですwhile (i==0)i、ループ内で決して変更されません。

while (i==0)  // Infinite loop, i is never change inside the block. 
{   
    if (sum < 100)    // If total is less than 100
        cout << "Thank you. The total was " << sum << endl 
                 << "The total number of inputs reads: " << sum2 << endl
                 << "The total is less than 100." << endl ;
    else            // Else total is greater than 100
            cout << "Thank you. The total was " << sum << endl 
                 << "The total number of inputs reads: " << sum2 << endl 
                 << "The total is greater than 100." << endl;
}

ここでは、ループ構造はまったく必要ありません。

編集:あなたが欲しいものは:

#include <iostream>
using namespace std;

int main(int argc, const char* argv[]) {
  int i, sum, count;

  cout << "Enter numbers, one per line. Enter 0 to end:" << endl;

  while (i!=0) {
    cin >> i; 
    sum += i;
    count++;
  }   

  cout << "Thank you. The total was " << sum << endl 
       << "The total number of inputs reads: " << count << endl;

  if (sum < 100)
    cout << "The total is less than 100." << endl;
  else
    cout << "The total is greater than 100." << endl;

  return 0;
}

デモ:

$ ./a.out 
Enter numbers, one per line. Enter 0 to end:
1000
100
10
0
Thank you. The total was 1110
The total number of inputs reads: 4
The total is greater than 100.

$ ./a.out 
Enter numbers, one per line. Enter 0 to end:
1
2
3
0
Thank you. The total was 6
The total number of inputs reads: 4
The total is less than 100.

カウントには終了が含まれているため、代わり0にレポートすることをお勧めします。count-1

于 2013-01-25T23:19:34.330 に答える