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

C++ 子函數中使用 ifstream 讀取失敗的原因:返回值未接收導致主函數變量未更新

     編輯:程式設計疑難解答

問題代碼


int readNum() {
    int n;
    cin >> n;
    return n; // 有返回值
}

int main() {
    int n = 0;
    while (readNum()) { // 調用但未接收返回值!
        cout << n; // n 永遠是 0
    }
}

根因

readNum() 讀取輸入並返回數值,但 main 中 while (readNum()) 僅判斷返回值是否為 0,**未將返回值賦給 n**。導致 n 始終保持初始值 0。

修正


// 方案一:在循環條件中接收
int n;
while ((n = readNum()) != 0) { // 或 while (n = readNum())
    cout << n;
}

// 方案二:引用參數傳出
void readNum(int &out) { cin >> out; }
int main() {
    int n;
    while (true) {
        readNum(n);
        if (n == 0) break;
        cout << n;
    }
}

// 方案三:返回 optional (C++17)
std::optional readNum() {
    int n; 
    if (cin >> n) return n;
    return std::nullopt;
}

最佳實踐

  • 函數有返回值時,**必須接收使用**,否則編譯器會警告(需開啟 -Wunused-result)。
  • 輸入函數建議返回 bool 表示成功/失敗,數值通過引用/指針輸出,避免 0 值語義衝突。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved