以下皆以「C 語言」語法為主。

# Scanf

資料格式對應的符號範圍
int%d2^31 到 2^31 – 1 (4 位元組)
long%ld同 int
long long%lld-2^63 到 2^63 – 1
float%f
double%lf
scanf("%c%s%d%f",&ch,str,&num,&value);

除了 %c 以外,各種輸入方式皆會忽略前方多餘的空白字元。

以下為最常見的測試資料型式

# 讀入 n 筆資料

讀入n筆資料
int main() {
	int n;
	scanf("%d",&n);
	while (n--) {
		/* 讀取每筆資料 */
	}
	return 0;
}

# 讀至檔案結束

測試資料不會告訴你有多少筆資料,必須一直處理到沒有資料為止。

讀至檔案結束
int main() {
	int x;
	while (scanf("%d",&x)!=EOF) {
		/* 處理目前這筆資料 */
	}
	return 0;
}

# 讀至 0 結束

讀至0結束
int main() {
	int n;
	while (scanf("%d",&n)!=EOF) {
		if (n==0) break;
		/* ... */
	}
	return 0;
}

# 一次讀取一列資料直到檔案結束

一列的資料中可能包含空白,無法當一般字串處理,因此需要一次將一整列資料進行讀取。可以使用 C 語言的 fgets 或 C++ 的 getline.

一次讀取一列
#include <stdio.h>
int main() {
	char s[100];
	while ( fgets(s,100,stdin) != NULL ) { // 100 為一列的 size
		/* ... */
	}
	return 0;
}

C++ 版: while ( getline(cin,s) ) {}

若輸入的資料超過 99 個字元,則只會讀取前 99 個字元,並以「\0」最為字串結尾。

因為最後的換行符號也會讀近來,所以需另外處理如下。

#include<string.h> //for strlen
int len = strlen(line);
if (line[len-1] == '\n') line[len-1]='\0';

# Printf

% 到對應的符號中間可以加的額外格式設定

說明
n共印 n 位數,不足補空格
.m小數後共幾位數
-靠左對齊 (預設為右)
+強制顯示正負號
0數字前不足處補 0
Edited on