c ++

时间:2017-05-01 09:32:35

标签: c++

我正在编写一个c ++程序,它从用户那里获取输入并在数组中输入该数字。此外,我还包括如果用户输入数字并且它已经存在于列表中。然后控制台只显示一条消息。但不知何故,当我输入一个独特的元素时,它仍然显示我

  

不允许重复值

请看这个代码并告诉我我错在哪里。

void addElement(int i){
    if (rear==-1 && top == 0){
        rear++;
        Array[rear]=i;
    }

    else {
            for(int l=1 ; l<=rear ; l++){
             if((Array[l]) == i){
                cout<<"\n*Duplicate value not allowed*\n";
             }
             else{
                 rear++;
                    Array[rear] = i;
             }
         }
    }
}

2 个答案:

答案 0 :(得分:1)

我看到你的逻辑存在两个问题,

    在for循环中
  1. 你不是从第一个元素迭代而是迭代 索引为1
  2. 的第二个元素
  3. 一旦找到重复项,您应该退出for循环,如果 没有找到重复然后只插入值,而不是 多次这样做。
  4. 请参阅以下代码

    void addElement(int i) {
        if (rear==-1 && top == 0) {
            rear++;
            Array[rear]=i;
        }
    
        else {
            for(int l=0 ; l<=rear ; l++) {
                if((Array[l]) == i){
                    cout<<"\n*Duplicate value not allowed*\n";
                    return;
                }     
            }
            rear++;
            Array[rear] = i;    
        }
    }
    

答案 1 :(得分:0)

你的逻辑存在缺陷:

    for(int l=1 ; l<=rear ; l++){
        if((Array[l]) == i){
            cout<<"\n*Duplicate value not allowed*\n";
        } else {
            rear++;
            Array[rear] = i;
        }
    }

在这里检查第二个元素是否等于i(顺便说一下,为什么不从索引0处的第一个元素开始?),如果不是你将i添加到数组中。然后继续检查下一个元素是否等于i。因此,您将始终首先添加i,然后发现它在数组中。

相反,您应首先检查它是否在数组中,并且只有在您选中所有元素之后才添加它或打印消息。