首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計疑難解答

C++ if 語句判斷條件寫成賦值導致永真問題

     編輯:程式設計疑難解答

錯誤代碼

char name = 'A';
cin >> name;
if (name = 'A')  // ← 這裡是賦值,非比較
    cout << "聯系人";
else
    cout << "陌生人";

現象

無論輸入什麼,均輸出「聯系人」。

原因

  • `name = 'A'` 是**賦值表達式**,值為賦值後的 `'A'` (ASCII 65),非零即 `true`。
  • 賦值同時將 `name` 覆蓋為 `'A'`,原輸入丟失。

修正

if (name == 'A')  // 雙等號比較
    cout << "聯系人";
else
    cout << "陌生人";

防範技巧

  1. 常量前置:`if ('A' == name)` 若誤寫成 `=` 編譯報錯 (無法賦值給常量)。
  2. 編譯器警告:GCC/Clang `-Wparentheses`、MSVC `/Wall` 會提示「建議在賦值外加括號」或「條件為常量」。
  3. 靜態分析:Cppcheck、SonarQube、CLion 內建檢查會標記可疑賦值。

擴展:字符串比較

C++ 風格字符串用 `std::string`,直接 `==` 比較內容:

std::string name;
cin >> name;
if (name == "A") { ... }

C 風格字符數組需用 `strcmp(name, "A") == 0`。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved