我应该从类似于这种格式的文件中读取输入和参数:
Add id:324 name:"john" name2:"doe" num1:2009 num2:5 num2:20
Run Code Online (Sandbox Code Playgroud)
问题是我不允许使用fgets.我尝试使用fscanf,但不知道如何忽略":"并分隔字符串'name:"john"'.
如果您确定输入文件将采用格式良好,非常特定的格式,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");
Run Code Online (Sandbox Code Playgroud)
输出:
添加324 john doe 2009 5 20
否则,我会手动解析一次读取一个字符的输入,或者如果由于某种原因使用fgets()不允许,则将其抛入缓冲区.让它缓冲比恕我直言更容易.然后你可以使用其他函数,比如strtok()什么来做解析.