例如題目要求加總每行整數的和,每一行都是一筆測資,資料數不固定。
input
1 2 3
2 3 5 7
3 3
output
6
17
6
第一種作法:先用fgets讀取整行資料,再用strtok做分解。
#include <stdio.h> #include <string.h> #define MAX 100 int main(void) { char s[MAX]; char *pt; int x, sum; while (fgets(s, MAX, stdin)) { pt = strtok(s, " "); sum = 0; while (pt) { sscanf(pt, "%d", &x); sum += x; pt = strtok(NULL, " "); } printf("%d\n", sum); } return 0; }
第二種作法,是我在網路上看到的程式碼,比較直觀,也比較好實做。
利用scanf()搭配%s%c的特性,再用sscanf()處理,這種作法也是K&R的其中一題exercise。
#include <stdio.h> #define MAX 10 int main(void) { char s[MAX]; char c; int x, sum; sum = 0; while (scanf("%s%c", s, &c) == 2) { sscanf(s, "%d", &x); sum += x; if (c == '\n') { printf("%d\n", sum); sum = 0; } } return 0; }scanf("%s%c", s, &c) == 2的意思是一次讀取一個整數(視為字串),
再加上整數後面的space或是newline。
如此,類似的題目,例如calculator,不定筆字串,皆可以用這種方式處理。
沒有留言:
張貼留言