sscanf行为/返回值

drj*_*976 9 c scanf

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

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

else
    // fail
Run Code Online (Sandbox Code Playgroud)

我已经阅读了sscanf的手册页,我仍然对检查返回值以及此代码的工作原理感到困惑.他们声明"这些函数返回分配的输入项数".

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

Ane*_*eri 8

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


chu*_*ica 7

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

2:如果您的输入符合以下
[可选空格][小数位1 ][可选空格][任意字符][以下数据未读取]

1:如果您在上面输入失败,但匹配以下内容
[可选空格][小数位1 ][可选空格][没有更多数据可用]

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

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


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

2或罕见的输入错误。