我有一个包含任务状态列表的文件:
PENDING Task number 1
COMPLETED Task number 2
COMPLETED Task number 3
我正在尝试使用以下内容阅读此文件:
char status[10];
char text[1024];
while(fscanf(file, "%s %s", status, text) != EOF) {
printf("%s %s\n", status, text);
}
然而输出完全错误。只有任务文本的第一个单词才能到达文本变量。我该如何解决这个问题?
答案 0 :(得分:0)
char status[10];
char text[1024];
char number[1024];
char i[1024];
while(fscanf(file, "%s %s %s %s", status, text, number, i) != EOF) {
printf("%s %s %s %s\n", status, text, number, i);
}
如果您知道“数字”字段始终为“数字”,并且您知道它后跟一个int, 你可以说:
char status[10];
char text[1024];
int i;
while(fscanf(file, "%s %s number %d", status, text, i) != EOF) {
printf("%s %s number %s\n", status, text, i);
}
或
char line[1000];
while(fgets(line, 1000, file)) {
char *p;
for(p = strtok(line, " \n"); p; p = strtok(p, " \n")) {
printf("%s ", p);
}
printf("\n");
}
答案 1 :(得分:0)
逐行阅读Buffer
,然后使用strtok()
,您可以将它们分成单词......
char *fgets(char *s, int size, FILE *stream);
#define MAX_LENGTH 100
File *ptr;
char buffer[MAX_LENGTH]
ptr=fopen("filepath","mode");
while(fgets(buffer,sizeof(buffer),ptr)!=EOF)
{
//use strtok
}
答案 2 :(得分:0)
如果您阅读this one之类的引用,您将看到可以使用 sets 作为格式,包括在输入不在集合中时读取的负集。这意味着您可以执行类似
的操作if (fscanf(file, "%s %[^\n]s", status, text) == 2)
{
/* Got all */
}
在格式字符串"%s %[^\n]s"
中,第一个%s
将读取,例如"PENDING"
,第二个格式字符串%[^\n]s
将读取剩余行,直到换行符,因此它应为"Task number 1"
。