如何避免在sscanf上忽略空格

时间:2014-05-24 09:27:03

标签: c scanf

我正在尝试将输入与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的最佳方法是什么,以便检查所需类型(至少一个或多个空格)之间的空格。

1 个答案:

答案 0 :(得分: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;

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