如何在此文件中正确使用fscanf

时间:2014-05-20 08:55:02

标签: c scanf

我的文件包含以下内容:

  

Bob Human,1

     

John Cat,3

     

Mary Dog,2

如何正确使用fscanf在结构中包含每个字符串和整数。

typedef struct {
    char name[20];
    char surname[20];
    int code;
} entry;

然后我创建了一个_entry_

的数组
entry a[3];

_a_如何使用fscanf正确获取每个值?

编辑:

我试过这个:

while(TRUE) {
    nscan=fscanf(infile, "%s %s d%c", temp.name, temp.surname, &temp.code, &termch);
    if(nscan==EOF) break;
    if(nscan!=4 || termch!='\n') {
        printf("Error\n");
    }
    RecBSTInsert(&a, temp);
}

但似乎两次通过最后一行。

2 个答案:

答案 0 :(得分:1)

你很接近,但是你没有正确处理逗号。

像往常一样,阅读整行更容易,然后解析它们。让我们这样做。

尝试:

char line[1024];

if(fgets(line, sizeof line, infile) != NULL)
{
  nscan = sscanf(line, "%s %[^,], %d", temp.name, temp.surname, &temp.code);
}

如果转换了所有字段,返回值将为3,否则您将出错。

答案 1 :(得分:0)

#include <stdio.h>

typedef struct{
    char name[20];
    char surname[20];
    int code;
} entry;

int main(){
    entry temp, a[3];
    FILE *infile = fopen("data.txt", "r");
    int i=0, n;
    while(fscanf(infile, "%19s %19[^,], %d", temp.name, temp.surname, &temp.code)==3){
        a[i++] = temp;
        if(i==3)break;
    }
    fclose(infile);
    n = i;
    for(i=0;i<n;++i){
        printf("%s %s, %d\n", a[i].name, a[i].surname, a[i].code);
    }
    return 0;
}