首页 > 解决方案 > 如何使用 sscanf 将字符串从文件解析为结构?

问题描述

我有以下结构定义:

struct Sportsman
{
    string name;
    double points[7];
    double avr_point; 
};

我想将以下文件内容读取到结构数组中:

Petrov 4,9 5,3 5,0 5,0 4,9 5,3 5,5
Ivanov 6,0 5,9 5,9 5,7 5,7 5,8 5,9

这就是我尝试的方式:

ifstream fin("sportsman.txt");
string line;
int i = 0;
while (getline(fin, line))
{
    sscanf(line.c_str(), "%s %lf %lf %lf %lf %lf %lf %lf", &sm[i].name, &sm[i].points[0], &sm[i].points[1], &sm[i].points[2], &sm[i].points[3],
                          &sm[i].points[4], &sm[i].points[5], &sm[i].points[6], &sm[i].points[7]);
    i++;
}

但是结构字段“名称”没有正确填写。看起来前四个字符被忽略了,我只得到“Petrov”和“Ivanov”的部分“ov”,而分数很好。

那么,我应该如何使用 sscanf 和 %s 以正确的方式读取名称?

标签: c++

解决方案


推荐阅读