无法使用sscanf获取值

时间:2014-01-05 13:18:45

标签: c

我正在尝试从包含以下行

的文本文件中获取输入
John,.) 789.. 89,88,79,69    

但是,我无法使用我的sscanf声明正确获取数字,我哪里错了?名称打印正确,但标记是垃圾值......

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

typedef struct
{
    char name[20];
    int ID;
    int marks[4];

} details;

int main()
{
    char string[100];
    details student[2];

    FILE *ptr = fopen("testing7.txt", "r");
    if ((ptr = fopen ("testing7.txt", "r")) != NULL)
        printf("file successfully opened\n");
    else
    {
        printf("file could not be opened\n");
        return 0;
    }

    fgets(string,100, ptr);

    // testing to see if string was obtained
    printf("%s", string);

    sscanf(string,"%s,.) %d.. %d,%d,%d,%d", student[0].name, &student[0].ID,   &student[0].marks[0], &student[0].marks[1],&student[0].marks[2],&student[0].marks[3]);

    printf("%s\t%d\t%d\t%d\t%d\t%d\n", student[0].name, student[0].ID, student[0].marks[0],  student[0].marks[1],  student[0].marks[2],  student[0].marks[3]);

    fclose(ptr);
    return 0;
}

1 个答案:

答案 0 :(得分:2)

逗号,fullstop或括号不被视为空白字符,因此格式说明符%s将使用它们。

我没有对此进行测试,但以下格式字符串应该适用于您的情况:

%[^,],.) %d.. %d,%d,%d,%d

说明:

%[^,] =&gt;阅读直到遇到逗号。