Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby-on-rails-4/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c+中的非重复数组值+; 我编写了一个C++程序,它从用户那里输入并输入数组中的那个数。此外,我还提到,如果一个用户输入了一个号码,而这个号码已经存在于列表中。然后控制台只显示一条消息。但不知何故,当我输入一个独特的元素时,它仍然会显示给我_C++ - Fatal编程技术网

c+中的非重复数组值+; 我编写了一个C++程序,它从用户那里输入并输入数组中的那个数。此外,我还提到,如果一个用户输入了一个号码,而这个号码已经存在于列表中。然后控制台只显示一条消息。但不知何故,当我输入一个独特的元素时,它仍然会显示给我

c+中的非重复数组值+; 我编写了一个C++程序,它从用户那里输入并输入数组中的那个数。此外,我还提到,如果一个用户输入了一个号码,而这个号码已经存在于列表中。然后控制台只显示一条消息。但不知何故,当我输入一个独特的元素时,它仍然会显示给我,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<<"

不允许重复值

请看这段代码,告诉我哪里错了

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;
             }
         }
    }
}
void addElement(int i){
如果(后==-1&&top==0){
后++;
数组[后]=i;
}
否则{
对于(int l=1;l您的逻辑有缺陷:

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

for(int l=1;l我发现您的逻辑有两个问题

  • 在for循环中,不是从第一个元素开始迭代,而是从 索引后的第二个元素是
    1
  • 一旦发现重复项,您应该退出for循环,如果 找不到重复项,然后只插入值,而不是 多次这样做
  • 请参见下面的代码

    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;    
        }
    }
    
    void addElement(int i){
    如果(后==-1&&top==0){
    后++;
    数组[后]=i;
    }
    否则{
    
    对于(int l=0;lYou应该注意,当您检查副本时,元素是预先插入的。因此它肯定会告诉您找到了副本。@xhg谢谢,我找到了它。。为什么不使用
    std::set
    ?这是因为我不知道它@ChristianHackl@AhmadHabib:好吧,现在你知道了!:)我用逻辑检查为**l=0**首先,它也不起作用。“i”是用户输入的元素,与列表中以前的元素一起检查。是的,我用l=0尝试过,它也不起作用,但在找到重复项时我没有尝试返回……它起作用了,谢谢。我可以使用“break”吗而不是返回?除此之外,还有一件事您应该看到,正如答案中所建议的,如果您使用break,那么for循环之后的语句也将被执行,但我们不希望它们执行,因为找到了重复的语句。谢谢您的帮助:)