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

C++ 迴圈區域變數每次迭代自動銷毀重建:無需手動清零,直接重新賦值

     編輯:程式設計綜合問答

核心觀念

C++ for/while 迴圈區塊內宣告的區域變數,每次迭代進入區塊時建構,離開區塊時解構。下一輪迭代會重新建立新的變數實例,舊實例記憶體已釋放(基本型態無解構函式,單純棧幀回收)。

原程式碼問題


while (w != r) {
    typedef vector::size_type longing;  // 類型別名,無運行成本
    string n;                           // 每輪新建立,預設空字串
    while (cin >> n) { ... }            // 內層迴圈讀取直到 EOF/失敗
    // 內層迴圈結束後 n 仍保留最後值,但外層下一輪 n 會重新建構為空
}

實際 Bug:內層迴圈條件

while (cin >> n) 讀取成功持續迴圈,直到輸入結束或非字串。導致單次外層迴圈就消耗所有輸入,第二輪外層 cin >> n 直接失敗,n 保留上輪值(未重新讀取)。

修正邏輯


for (int i = 0; i < r; i++) {
    string name;
    cout << "姓名:";
    if (!(cin >> name)) break;  // 讀取失敗退出
    cout << "請輸成績(以負數結束):";
    vector grades;
    int x;
    while (cin >> x && x >= 0) grades.push_back(x);
    // 計算總分...
}

關鍵修正點

  • 外層用 for 固定人數 r。
  • 內層成績輸入用 while (cin >> x && x >= 0),明確結束條件。
  • 區域變數 name, grades 每輪自動重建,無需手動清零。
  • 若需保留歷史資料,宣告在迴圈外或使用 vector 陣列。

原答案核心

「string n("");初始化變量」

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