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

C/C++ 輸入流轉換:scanf 返回值判斷邏輯改寫為 cin 鏈式調用

     編輯:程式設計綜合問答

原 C 風格代碼


while (scanf_s("%d%d%d", &n, &k, &m) == 3 && n) {
    // 處理邏輯
}

scanf_s 返回成功匹配項數,==3 表示三個整數都讀取成功,&& n 表示 n 非零繼續。

C++ 風格等價寫法


// 核心:cin >> 返回流引用,流轉 bool 判斷是否有效
while (cin >> n >> k >> m && n) {
    // 處理邏輯
}

機制解析

  1. cin >> n 提取整數,返回 cin 引用
  2. 鏈式 cin >> n >> k >> m 依次提取,任一失敗(EOF、類型不匹配)流進入 fail 狀態
  3. while (cin ...) 隱式調用 operator bool(),流有效為 true,失敗/EOF 為 false
  4. && n 短路求值,n 為 0 時跳出循環

對比優勢

特性scanf 系cin/cout
類型安全運行期格式串檢查編譯期類型推導
擴展性難擴展自定義類型重載 operator>>/<<
同步性能快(無同步開銷)默認同步 stdio,可關閉
錯誤恢復手動清緩衝區cin.clear(), cin.ignore()

性能優化(大數據輸入)


ios::sync_with_stdio(false); // 關閉 C/C++ 流同步
cin.tie(nullptr);            // 解除 cin/cout 綁定
// 然後用 cin >> ... 速度媲美 scanf

完整模板


#include 
using namespace std;

int main() {
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    
    int n, k, m;
    while (cin >> n >> k >> m && n) {
        // 核心邏輯
    }
    return 0;
}

while (cin >> n >> k >> m && n) 是現代 C++ 競技編程、OJ 題目的標準輸入循環寫法。

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