0

このプログラムは大丈夫ですか、それとも改善できますか(しかし単純に)?繰り返し番号が入力されていないことを確認するにはどうすればよいですか?

int n;
int array[9];

cout<<"Enter Number Between 9-0 Only"<<endl;
for(int i = 0; i<=10; i++){
    cout<<"Enter Number" <<(i+1)<<endl;
    cin >> n;
    if((n >= 0) && (n <=9)){
       array[i]=n;
     }
        else{
        cout<<"Numbers from 0-9 only\n"<<endl;

        break;
    }

}
4

2 に答える 2

1

(編集)完全なコンパイルコード

数値がより高いパフォーマンスで使用されているかどうかを確認するには、次のようなものを試してください(Jack Radcliffeの作業コードを使用)。

#include <iostream>
using namespace std;

int main()
{
  int n = 0;
  int array[9] = {0};

  bool isUsed[10] = {0};

  for(int i = 0; i < 9; i++) 
  {
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;

    if((n >= 0) && (n <= 9))
    {
      if (isUsed[n] == false)
      {
        array[i] = n;
        isUsed[n] = true;
      }

      else
      {
        cout << "Number has already been used." << endl;
        i--;
      }
    }

    else 
    {
      cout << "Numbers from 0-9 only." << endl;
      i--;
    }
  }

  return 0;
}

この単純なコードでは最適化は必ずしも必要ではありませんが、これは練習の練習のように思われるので、最適化されたコードも練習してみませんか?

于 2012-07-18T20:24:32.640 に答える
0

目立つ問題が2つありますが、ほとんどは問題ありません。

まず、サイズ9の配列がありますが、forループを0から開始し、10まで実行しているため、11個の数値を取り込んでいます。

第二に、あなたはそれを持っているので、入力された数が0から9の間でなければ、forループは壊れます。これは、無効な数値が入力された場合、9未満の数値が配列に入れられることを意味します。これを読むためにループ全体を変更してください。

for(int i = 0; i < 9; i++) {
    cout << "Enter Number " << (i + 1) << endl;
    cin >> n;
    if((n >= 0) && (n <= 9))
       array[i] = n;
    else {
        cout << "Numbers from 0-9 only\n" << endl;
        i--;
    }
}

火の部分全体は正しかったが、elseステートメントの切れ目を削除してi--に追加した。これを追加したので、ユーザーが番号を再入力するように求められたときに、入力番号は正しいインデックスになります。

これがお役に立てば幸いです。

于 2012-07-18T20:13:14.373 に答える