【问题标题】:fscanf: how to read but not assign commas?fscanf:如何读取但不分配逗号?
【发布时间】:2019-01-26 17:20:30
【问题描述】:

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

fscanf(text_file, "%s,%d,%lf,%lf%%%[^\n]", title, &count, &size, &percentage);

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

【问题讨论】:

  • 最好先用fgets()阅读所有行,然后用sscanf()

标签: c scanf


【解决方案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
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2016-09-28
    • 2023-03-29
    相关资源
    最近更新 更多