无论输入什么字符串,为什么输出始终为1。 请解释
int main() {
char ch[]={};
printf("%d", scanf("%s", ch));
return 0;
}
答案 0 :(得分:3)
scanf的手册页:
这些函数返回成功匹配的输入项数 并指定,可以少于提供,甚至为零 早期匹配失败的事件。
如果在任何一个输入结束之前到达输入结束,则返回值EOF 第一次成功转换或匹配失败。 EOF是 如果发生读错误也会返回,在这种情况下会出错 设置流的指示符(请参阅ferror(3)),并设置errno 表明错误。
因此,这意味着scanf()
会返回成功阅读的项目数。
此外,C不允许零大小的数组。
C11 6.7.6.2数组声明符:
第1段:
除了可选的类型限定符和关键字static之外,[ 和]可以划定表达式或*。如果他们划定表达式 (指定数组的大小),表达式应具有 整数类型。 如果表达式是常量表达式,它应该是 值大于零。元素类型不得为 不完整或函数类型。可选的类型限定符和 关键字static只出现在函数的声明中 具有数组类型的参数,然后仅在最外面的数组中 类型推导。
答案 1 :(得分:3)
因为scanf
返回它读取的项目数。在您的情况下,它正在读取一个字符串,因此它返回1,然后通过printf
打印到标准输出。