例如題目要求加總每行整數的和,每一行都是一筆測資,資料數不固定。
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,不定筆字串,皆可以用這種方式處理。
沒有留言:
張貼留言