sscanf行为/返回值

时间:2013-05-27 19:46:00

标签: c scanf

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:4)

您的sscanf(string, " %d %c")将返回EOF012

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

1:如果您的输入在上方失败但与以下内容匹配 [可选空格] [十进制数字*] [可选空格] [不再有数据]

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

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

  • 小数位前面可能有符号字符+-

答案 2 :(得分:2)

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

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

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

您也可以查看:cplusplus : sscanf

希望有所帮助:)