我是一名新手学习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?
答案 0 :(得分:6)
如果sscanf已成功读取%d
而没有其他内容,则会返回1
(已分配一个参数)。如果在数字之前有字符,它将返回0
(没有分配参数,因为需要先找到一个不存在的整数)。如果有一个带有附加字符的整数,它将返回2
,因为它能够分配两个参数。
答案 1 :(得分:4)
您的sscanf(string, " %d %c")
将返回EOF
,0
,1
或2
:
2
:如果您的输入符合以下要求
[可选空格] [十进制数字*] [可选空格] [任何字符] [额外忽略]
1
:如果您的输入在上方失败但与以下内容匹配
[可选空格] [十进制数字*] [可选空格] [不再有数据]
[修正]
0
:如果您的输入在空格和可选符号之后未找到数字:示例:"z"
或"-"
。
EOF
:如果输入为空""
或仅为空格。
+
或-
。答案 2 :(得分:2)
您可以通过将函数放在printf
语句中来检查函数返回的内容,如下所示:
printf("%d",sscanf(string, " %d %c", &n, &c));
这可能会通过在您的终端上打印sscanf
的返回值来清除您的疑问。
您也可以查看:cplusplus : sscanf
希望有所帮助:)