C++語法 連等“==”和等號“=”的區別


今天練了手冒泡排序,初始程序代碼如下(偽隨機):

#include <iostream>
using namespace std;

int main()
{
    int a[100];
    for (int i=0;i<100;i++){
        a[i]=rand()%900+100;
    }
    a[0]=0;                         //自主設定數組最前面的值,測試break效果
    a[1]=1;
    a[2]=2;
    int temp=0;                     //冒泡排序中暫存需要交換的值
    int count=0;                    //記錄到break為止最外層for循環進行的次數
    bool change=false;              //設定參數判定終止for循環的條件
    for(int j=99;j>0;j--)
    {
        for(int k=0;k<=j-1;k++)
        {
            if(a[k]>a[k+1])
            {
                temp = a[k];
                a[k] = a[k+1];
                a[k+1] = temp;
                change=true;
            }
        }
        count=100-j;
        if (change==false)
            break;            
        else
            change = false;
    }
    for(int i=0;i<100;i++)
    {
        cout<<a[i]<<" ";
    }
    cout<<endl;
    cout<<"排序在第"<<count<<"遍冒泡結束后終止"<<endl;
    system("PAUSE");
    return 0;
}

但是程序運行結果中,總是顯示“排序在第99遍冒泡結束后終止”,即最外層for循環全部運行了一遍,break沒有起到效果……

找了半天沒看出哪里有錯誤,后知后覺,是if判定中的連等號寫成了等號……應為如下:

        if (change==false)
            break;            
        else

想必是從前學VB的習慣吧。那里邊判定就是等號,所以怎么看也看不出來

就目前所知,連等“==”一般用於判定/比較兩邊的值,等號“=”則一般在賦值過程中使用

這種不屬於編譯錯誤,很難查錯,一般需要逐行分析各變量的值才能發覺(尤其是存在上述知識錯覺的情況下)

**謹記養成良好語法記憶與習慣的重要性**


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM