为什么输出是' 4' ? ,输入是' A'
int main() { int a = 5;
if(scanf("%d",&a))
printf("%d",a+1);
else
printf("%d",a-1);
}
答案 0 :(得分:2)
当使用类型sepcifier %d
时,函数需要输入有效的带符号十进制整数。很明显,符号'A'
不是数字,因此输入失败。
现在出现一个问题:在这种情况下函数会返回什么?
根据函数scanf
的描述(C标准,7.21.6.4 scanf函数):
3如果输入,scanf函数返回宏EOF的值 在第一次转换(如果有)完成之前发生故障。 否则,scanf函数返回输入项的数量 已分配,可以少于提供的,或甚至为零 早期匹配失败的事件。
所以if语句中的条件
if(scanf("%d",&a))
评估为0(false)并执行了else语句。
else
printf("%d",a-1);
表示4。
考虑到一般情况下您可以为整数输入符号'A'
。但在这种情况下,相应的整数变量必须声明为unsigned
,格式说明符scanf
必须为%x
例如
#include <stdio.h>
int main( void )
{
unsigned int a = 5;
if ( scanf( "%x", &a ) )
{
printf( "%u\n", a + 1 );
}
else
{
printf( "%u\n", a - 1 );
}
}
在这种情况下,输出将为11
。:) scanf
将符号'A'
视为10的十六进制表示。
答案 1 :(得分:1)
您已指示scanf
读取有符号整数。输入甚至没有以符号或数字开头,因此scanf
找不到有符号整数,因此scanf
返回0
(输入项的数量已成功)匹配和分配),让您进入else
的{{1}}子句。由于if
没有匹配任何内容,因此它没有分配任何内容,这意味着scanf
未被更改,a
为a-1
。< / p>
你没有说明你的期望,所以我不知道建议的修正。
答案 2 :(得分:0)
在scanf()中,您传递的所有参数都是指针。指针之间没有默认提升,并且传递与指针类型匹配的确切格式说明符至关重要。
更多清关: - 点击here!