C - sscanf在读取文件后给出了错误的输出

时间:2016-02-20 12:07:19

标签: c file struct delimiter scanf

我试图从 C 中的文本文件中读取一行,但输出错误。我想我的代码中的分隔符错了。有人可以帮忙吗?

text:

  

你好,世界,1,2,再见

输出:

  

hello world 12576 117453344 bye

typedef struct structure {
    char hello[25];
    char world[25];
    int num1;
    int num2;
    char bye[25];
} Hello;

主:

#include <cstdlib>
#include <stdio.h>
#include <stdlib.h>
#include "structure.h"

using namespace std;

int main(int argc, char **argv) {
    char line[25];
    FILE *fp;
    fp = fopen("text.txt", "r");
    Hello c;  

    while (fgets(line, sizeof(line), fp) != NULL) {
        sscanf(line, "%[^','],%[^','],%[^','],%[^','],%s",
               c.hello, c.world, &c.num1, &c.num2, c.bye);
    }

    printf("%s %s %d %d %s", c.hello, c.world, &c.num1, &c.num2, c.bye);   

    return 0;
}

1 个答案:

答案 0 :(得分:3)

不要使用%[^',']来读取整数。应该使用%d,并且只是忽略','中字符串使用说明符%[^,]中的sscanf

并检查其返回值。