以下皆以「C 語言」語法為主。
# Scanf
資料格式 | 對應的符號 | 範圍 |
---|---|---|
int | %d | 2^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 筆資料
int main() { | |
int n; | |
scanf("%d",&n); | |
while (n--) { | |
/* 讀取每筆資料 */ | |
} | |
return 0; | |
} |
# 讀至檔案結束
測試資料不會告訴你有多少筆資料,必須一直處理到沒有資料為止。
int main() { | |
int x; | |
while (scanf("%d",&x)!=EOF) { | |
/* 處理目前這筆資料 */ | |
} | |
return 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 |