使用文件中的示例,使用fgets 读取每一行。
使用sscanf 解析每一行。
每个值组合都有一个不同的sscanf。如果第一个sscanf 扫描四个值失败,第二个sscanf 尝试扫描三个值,最后尝试扫描一个值。
这仅使用该结构的一个实例。可以使用结构数组或结构的链表。
#include <stdio.h>
#include <stdlib.h>
typedef struct Item {
int one;
int two;
char letter;
char used;
} item;
int main ( void) {
//int scanned = 0;
char line[100] = "";
item values = { 0, 0, 0, 0};
FILE *fin = NULL;
if ( NULL == ( fin = fopen ( "file.txt", "r"))) {
perror ( "file.txt");
return 1;
}
while ( fgets ( line, sizeof line, fin)) {
if ( 4 == sscanf ( line, "%d%c%d %c", &values.one, &values.used, &values.two, &values.letter)) {
printf ( "one %d used [%c] two %d letter %c\n"
, values.one, values.used, values.two, values.letter);
}
else if ( 3 == sscanf ( line, "%d%c %c", &values.one, &values.used, &values.letter)) {
values.two = 0;
printf ( "one %d used [%c] letter %c\n"
, values.one, values.used, values.letter);
}
else if ( 1 == sscanf ( line, " %c", &values.letter)) {
values.one = 0;
values.two = 0;
values.used = 0;
printf ( "letter %c\n", values.letter);
}
}
fclose ( fin);
return 0;
}
文件
2,5 c
3,9 d
4 u
2 r
q
输出
one 2 used [,] two 5 letter c
one 3 used [,] two 9 letter d
one 4 used [ ] letter u
one 2 used [ ] letter r
letter q