首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

PAT 基礎級 1002 A+B+C:while(scanf) 循環讀取多組數據求和

     編輯:關於C語言

題目描述

輸入多行,每行三個整數 A、B、C(範圍 -2^31 到 2^31-1),輸出每行三數之和。輸入以 EOF 結束。

核心代碼模式

#include <stdio.h>

int main(void) {
    long long a, b, c; // 32 位 int 相加可能溢出,用 64 位 long long
    while (scanf("%lld %lld %lld", &a, &b, &c) == 3) {
        printf("%lld\n", a + b + c);
    }
    return 0;
}

關鍵點解析

  1. scanf 返回值:成功匹配並賦值的項目數。== 3 表示三個整數全部讀取成功。
  2. EOF 處理:輸入結束時 scanf 返回 EOF(通常為 -1),循環條件失效自動退出。
  3. 數據類型選擇:題目範圍達 32 位有符號整數極限,三數相加最大 ±3×2^31,超出 32 位範圍,必須用 long long(至少 64 位)存儲輸入與結果。格式符 %lld。
  4. while 循環優勢:簡潔處理不定行數輸入,無需預先讀取行數。

常見錯誤

  • 使用 int 導致溢出錯誤
  • 判斷條件寫成 while(scanf(...) != EOF):若輸入行格式錯誤(如只有兩個數),scanf 返回 2,非 EOF,循環繼續但變量值未更新,導致死循環或錯誤輸出
  • 未處理行尾空白/換行:scanf 自動跳過空白符,無需額外 getchar()

擴展:C++ 版本

#include <iostream>
using namespace std;
int main() {
    long long a, b, c;
    while (cin >> a >> b >> c)
        cout << a + b + c << endl;
    return 0;
}

cin >> a >> b >> c 返回流對象,布爾語境下轉換為讀取成功與否,行為等價。

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