如果您确定输入文件将采用格式良好、非常具体的格式,fscanf()
始终是一个选择,并且会为您做很多工作。下面我用的是sscanf()
而只是为了说明而无需创建文件。您可以更改要使用的呼叫fscanf()
为您的文件。
#define MAXSIZE 32
const char *line = "Add id:324 name:\"john\" name2:\"doe\" num1:2009 num2:5 num3:20";
char op[MAXSIZE], name[MAXSIZE], name2[MAXSIZE];
int id, num1, num2, num3;
int count =
sscanf(line,
"%s "
"id:%d "
"name:\"%[^\"]\" " /* use "name:%s" if you want the quotes */
"name2:\"%[^\"]\" "
"num1:%d "
"num2:%d "
"num3:%d ", /* typo? */
op, &id, name, name2, &num1, &num2, &num3);
if (count == 7)
printf("%s %d %s %s %d %d %d\n", op, id, name, name2, num1, num2, num3);
else
printf("error scanning line\n");
Outputs:
添加 324 约翰·多伊 2009 5 20
否则,我会手动解析一次读取一个字符的输入,或者如果出于某种原因使用它,将其放入缓冲区中fgets()
不被允许。恕我直言,缓冲总是比不缓冲更容易。然后你可以使用其他功能,例如strtok()
以及进行解析等操作。