在scanf中使用%c并将值赋给c中的int变量?
有人能解释printf语句如何给出50吗?我有一个小小的endian机器。你的程序甚至不会编译,因为在scanf中使用%c并将值赋给c中的int变量?,c,dynamic-memory-allocation,endianness,C,Dynamic Memory Allocation,Endianness,有人能解释printf语句如何给出50吗?我有一个小小的endian机器。你的程序甚至不会编译,因为I是未声明的。我认为这是一个打字错误。由于您正在扫描%c,因此它将只读取255中的2个字符。现在2的ascii码为50,正在打印。这与endianess完全无关。给定int i,然后scanf(“%c”,&i)是未定义的行为,因为您使用了错误的格式说明符%c,用于char值。@尽管此代码不是一个完美的方案,但不会引发任何警告或错误。那么?编译器无法识别未定义的行为。事实上,他们可以假设这种情况永远
I
是未声明的。我认为这是一个打字错误。由于您正在扫描%c
,因此它将只读取255中的2个字符。现在2的ascii码为50,正在打印。这与endianess完全无关。给定int i
,然后scanf(“%c”,&i)代码>是未定义的行为,因为您使用了错误的格式说明符%c
,用于char
值。@尽管此代码不是一个完美的方案,但不会引发任何警告或错误。那么?编译器无法识别未定义的行为。事实上,他们可以假设这种情况永远不会发生。@Lundin:在一个小endian系统中,scanf
读取的字节被放入i
的低端字节中,而printf
将显示字符“2”的代码。在big-endian系统中,字节被放入高端字节,printf
将显示相应移位字符的代码。是的,这是一个拼写错误,我已经纠正了它。你的解决方案确实有道理。非常感谢。
int main()
{
int i= 0;
printf("i value is %d\n",i);
scanf("%c", &i); // I am giving an input of 255 here
printf("i after scan %d\n",i); // This prints 50. How???
return 0;
}