sscanf行为/返回值

我是一名新手学习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?

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

你的sscanf(string, " %d %c")将返回EOF02

2 :如果您的输入符合以下条件
[可选空格] [十进制数字*] [可选空格] [任何字符] [额外忽略]

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

[更正]
0 :如果您的输入在空格和可选符号之后没有找到数字:示例: "z""-"

EOF :如果输入为空""或仅为空格。

  • 十进制数字前面可能有符号字符+-

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

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

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

你也可以看一下: cplusplus:sscanf

希望有帮助:)