部分匹配后,scanf在EOF上应该返回什么?

| 考虑以下“ 0”转换说明符和输入:
\"%4c\"
\"abc\"
\"%x\"
\"0x\"
\"%f\"
\"1.0e+\"
即,输入是匹配的初始子序列而不是匹配的情况。假设在不完全匹配之后达到了EOF,
scanf
应该返回
EOF
还是
0
? C99中的文本为:   如果在任何转换之前发生输入失败,则fscanf函数将返回宏EOF的值。否则,该函数将返回分配的输入项目数,如果早期匹配失败,该数目可能少于所提供的输入项数,甚至为零。 在POSIX 2008中,它显示为:   成功完成后,这些功能应返回成功匹配和分配的输入项的数量;如果早期匹配失败,此数字可以为零。如果输入在第一次匹配失败或转换之前结束,则应返回EOF。如果发生任何错误,应返回EOF,并应设置[CX]和errno来指示错误。如果发生读取错误,则应设置流的错误指示符。 我不清楚的是部分匹配但不完全匹配是否构成“早期匹配失败”。在这种情况下,我会发现返回值0有用得多(它可以区分普通EOF与无效截断数据的情况),但我要找的只是帮助解释标准。 请注意,glibc的“ 0”在所有这些输入上都是完全不正确的,并返回“ 11”,将无效输入视为匹配项。我很确定已经报告了此问题,并将其标记为WONTFIX。 :-(     
已邀请:
我期望为0。 7.16.6.2/4:   失败被描述为输入失败(由于发生编码错误或输入字符不可用)或匹配失败(由于不适当的输入)。     

要回复问题请先登录注册