fscanf:如何读取而不分配逗号?

时间:2019-01-26 17:20:30

标签: c scanf

我有一个C程序,该程序从.txt文件中读取用逗号分隔的值列表,并将这些值分配给变量。我想将第一个值赋给一个字符串,第二个赋给一个int,第三个赋给一个双精度,第四个赋给一个双精度。但是,整行都分配给了字符串,其余的都是垃圾或随机值。我希望能够“跳过”逗号并读取逗号之间的赋值。最后一个双精度字符的末尾有一个百分号,因此我使用%%读取值,至少那是我认为应该做的。

<span itemprop="itemNum">56789</span>

数据点如下所示: 黄叶,43,4.50,9.00% 但是title的值包含整行,其余的只是随机垃圾值。

1 个答案:

答案 0 :(得分:1)

请记住,scanf()不适合用户输入。

无论如何... "%s"读取逗号(跳过空格),请尝试"%[^,]"

// assuming
// char title[99];
if (fscanf(f, " %98[^,],%d...", title, ...) != 4) /* error */;
//             ^ skip whitespace

更好的方法:用fgets()读整行,然后用sscanf()进行解析。

char buff[999];
while (fgets(buff, sizeof buff, f)) {
    // parse buff
}