c - 带有 %d 和 %c 的 char scanf 的不同答案

标签 c char scanf unsigned-char format-specifiers

这是一个用于交换一个字节的半字节的程序,这对一个字节来说是完美的,但我遇到了一个问题。

代码:

#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/

相关文章:

c++ - 哪些 C 结构出现在 std 命名空间中?

从文件中提取后无法将提取的数字转换为 int

c++ - 将 std::vector<char> 转换为 char* 会导致有缺陷的字符

c++ - 如何在c中重新初始化一个char *变量

matlab - 使用 'fscanf' 从 MATLAB 中的串行线读取数据时解释零

c++ - scanf - 程序等待另一个类似的?

c - 如何通过更改数据类型在不同变量中获取没有空格的输入

c - 将二进制文件移动到目录之外时出现段错误

c - 递归函数方程

c - 函数调用中数据复制到函数参数不匹配