确保输入唯一输入并存储在数组中

时间:2012-07-18 20:04:50

标签: c++

这个程序是正常的,还是可以改进(但很简单)?如何确保没有输入重复的数字?

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;
    }

}

3 个答案:

答案 0 :(得分:1)

不要重复输入:

   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)){
          bool bEntered  = false;
          for( int j=0; j<10;j++)
          {
               if( n == array[j] )
               {
                   cout << "number already has been input" << endl;
                   bEntered = true;
                   }
               }
          if( !bEntered )
       array[i]=n;

     }
        else{
        cout<<"Numbers from 0-9 only\n"<<endl;

        break;
    }

}

答案 1 :(得分: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;
}

这个简单的代码并不是完全必要的优化,但这似乎是一种练习,所以为什么不练习优化代码?

答案 2 :(得分:0)

大部分都很好,但有两个问题突出。

首先,你有一个大小为9的数组,但是你正在接受11个数字,因为你在0开始for循环并且直到10。

其次,因为如果输入的数字不在0到9之间(包括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--。我补充说,当提示用户重新输入号码时,条目编号将是正确的索引。

我希望这很有帮助。