【问题标题】:How to avoid whitespace being ignored on sscanf如何避免在 sscanf 上忽略空格
【发布时间】:2014-05-24 09:27:03
【问题描述】:

我正在尝试将我的输入与 3 种变量类型匹配:整数、浮点数和字符串。

char *input = "1 5.456 oxygen\0";

int i = sscanf(input, "%d %f %[^\0]", &id, &dens, name);
if (i != 3)
    break;

如果输入确实包含所有这 3 种类型,这将非常有用,并且我使用 sscanf 返回的值来检查这一点。

但如果输入缺少开头的整数如:

char *input = " 5.456 oxygen\0";

变量 i 仍将等于 3,因为 sscanf 会将 id 与 5 匹配,将 dens 与 .456 匹配。

使用 sscanf 的最佳方法是什么,以便它检查所需类型之间的空格(至少一个或多个空格)。

【问题讨论】:

  • 没有最好的方法使用scanf()。最好的选择是使用fgets() 和解析器(可以像strtol()strtod()strcpy() 一样简单)。

标签: c scanf


【解决方案1】:
const char *input = "1 5.456 oxygen";
char c1, c2;
if (sscanf(input, "%d%c%f%c %[^\n]", &id, &c1, &dens, &c2, name) != 5 ||
    !isspace(c1) || !isspace(c2)) break;

请注意,无法将\0 插入 scanf 格式,因此您需要其他内容,例如\n 那里。如果输入不包含\n,则此方法有效。

【讨论】:

    猜你喜欢
    • 2016-07-09
    • 1970-01-01
    • 2023-03-17
    • 2023-03-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多