C++ for/while 迴圈區塊內宣告的區域變數,每次迭代進入區塊時建構,離開區塊時解構。下一輪迭代會重新建立新的變數實例,舊實例記憶體已釋放(基本型態無解構函式,單純棧幀回收)。
while (w != r) {
typedef vector::size_type longing; // 類型別名,無運行成本
string n; // 每輪新建立,預設空字串
while (cin >> n) { ... } // 內層迴圈讀取直到 EOF/失敗
// 內層迴圈結束後 n 仍保留最後值,但外層下一輪 n 會重新建構為空
}
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("");初始化變量」