这是一个用于交换一个字节的半字节的程序,这对一个字节来说是完美的,但我遇到了一个问题。
代码:
#include<stdio.h>
void main()
{
unsigned char a = 0;
scanf("%d", &a);
a = ((a << 4) | (a >> 4));
printf("the value of a is %d\n\r", a);
}
您可以在 scanf
语句中看到我收到的是 %d
而不是 %c
这是为了一个字符
。上面的代码完美运行。但是,如果我用 %c
替换 %d
,我会得到一个不同的不需要的答案
为什么?
最佳答案
scanf
的正确说明符ing unsigned char
是%hhu
, 不是 %d
.
所以 scanf("%d", &a);
应该是 scanf("%hhu", &a);
.
您还应该使用 int main(void)
而不是 void main()
并删除 \r
在 printf 中,因为 \n
是每个系统上的新行。
关于c - 带有 %d 和 %c 的 char scanf 的不同答案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31113338/