Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/windows/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在scanf中使用%c并将值赋给c中的int变量?_C_Dynamic Memory Allocation_Endianness - Fatal编程技术网

在scanf中使用%c并将值赋给c中的int变量?

在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值。@尽管此代码不是一个完美的方案,但不会引发任何警告或错误。那么?编译器无法识别未定义的行为。事实上,他们可以假设这种情况永远

有人能解释printf语句如何给出50吗?我有一个小小的endian机器。

你的程序甚至不会编译,因为
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;
}