9

我是一个学习 C 的新手,并试图从在线讲座中理解以下代码。它在字符串中扫描一个整数;如果遇到字符,则 sscanf 失败。

int n; char c;
if (sscanf(string, " %d %c", &n, &c) == 1)
    //return the integer

else
    // fail

我已经阅读了 sscanf 的手册页,但仍然对检查返回值以及为什么该代码有效感到困惑。他们声明“这些函数返回分配的输入项的数量”。

如果 sscanf 只遇到字符,它会将它们写入 &c...但在这种情况下不会写入 &n。在这种情况下,我会认为 sscanf 的返回值仍然是 1?

4

3 回答 3

9

如果 sscanf 已成功读取%d并且没有其他内容,它将返回1(已分配一个参数)。如果数字前有字符,它将返回0(没有分配参数,因为需要先找到一个不存在的整数)。如果有一个带有附加字符的整数,它将返回2,因为它能够分配两个参数。

于 2013-05-27T19:50:34.450 回答
6

sscanf(string, " %d %c")将返回EOF, 0,12:

2:如果您的输入匹配以下
[可选空格][十进制数字1 ][可选空格][任何字符][以下数据未读取]

1: 如果您的输入在上面失败但匹配以下
[可选空格][十进制数字1 ][可选空格][没有更多可用数据]

0:如果您的输入在空格和可选符号之后没有找到数字:examples:"z""-".

EOF: 如果输入为空""或只有空格2


1十进制数字前面可以有一个单号字符:+-

2或罕见的输入错误。

于 2013-05-27T19:56:37.360 回答
2

您始终可以通过将函数放在printf如下语句中来检查函数返回的内容:

printf("%d",sscanf(string, " %d %c", &n, &c));

sscanf这可能会通过在终端上打印出返回值来消除您的疑问。

你也可以看看这个:cplusplus:sscanf

希望有帮助:)

于 2013-05-27T19:55:15.790 回答