将空格分隔的字符串从文件读入单个变量

时间:2013-09-05 19:08:01

标签: c

我有一个包含任务状态列表的文件:

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);
}

然而输出完全错误。只有任务文本的第一个单词才能到达文本变量。我该如何解决这个问题?

3 个答案:

答案 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"