HDU 1000 是線上評判系統(OJ)的「Hello World」,考驗基本輸入輸出與 EOF 處理。題目要求讀取多行輸入,每行兩個整數 A、B,輸出其和,直到檔案結尾。
A BA+B#include <stdio.h>
#include <stdlib.h>
int main() {
int a, b;
// scanf 返回成功讀取的項目數,遇到 EOF 返回 EOF(-1)
while (scanf("%d %d", &a, &b) != EOF) {
printf("%d\n", a + b);
}
return 0;
}
scanf("%d %d", &a, &b):格式字串中空格可匹配任意空白字元(空格、Tab、換行)!= EOF:scanf 成功讀取兩數返回 2,失敗或 EOF 返回 EOF(通常為 -1)printf("%d\n", a+b):每組結果獨佔一行,符合輸出格式| 錯誤寫法 | 問題 | 修正 |
|---|---|---|
while(scanf(...)) | 若輸入 0 0 返回 2 (真),但 0 0 和後續無輸入同樣返回 0/2 易混淆 | 明確比較 != EOF |
忘記 & | scanf("%d", a) 傳值而非址,導致段錯誤 | 必須 &a |
使用 cin/cout 未關同步 | 大量資料下 C++ I/O 慢可能 TLE | 加 ios::sync_with_stdio(false); cin.tie(nullptr); |
若題目擴充至超大整數(超過 long long),需用字串模擬加法:
// 字串反轉逐位相加,處理進位
char *addStrings(char *a, char *b) { ... }
A+B 熟悉提交流程、編譯參數、輸出格式while(scanf(...)!=EOF) 讀取多測資習慣掌握這道「入門第一題」,就能輕鬆應對所有「多組測資、EOF 結束」類型的 OJ 題目。