在C中扫描和打印char变量

时间:2018-07-12 13:30:13

标签: c printf scanf

为什么打印x总是等于零?

#include <stdio.h>

int main()
{
    unsigned char num, x, nnum, y = 0;
    printf("please enter the number of bits u want to clear \n");
    scanf("%d%d", &x, &y);
    printf("%d%d", x, y);
    return 0;
}

我尝试将它们分开放置,但是在从y中获取变量后,x变为零。 我知道它们最终将存储在堆栈中,每个char都是1字节,因此在打印它们时 它们都应该具有我所赋予的价值。

3 个答案:

答案 0 :(得分:3)

在您的代码中,

 scanf("%d%d",&x,&y);

undefined behavior。转换说明符和提供的参数不匹配。对于scanf()系列,%d希望使用指向有符号整数的指针类型的参数,而您要提供指向无符号char的指针。

您需要使用

 scanf("%hhu%hhu",&x,&y);

答案 1 :(得分:0)

字符的格式说明符为%c。使用%d会导致未定义的行为(覆盖堆栈中的下一个变量)。

如果要使用8位无符号整数,请使用uint8_t(stdint.h)以及inttypes.h中的SCNu8和PRIu8宏。

答案 2 :(得分:-1)

数据类型为char,因此char的scanf基本上为%c。您要么将其变量分开。如果您的x是一个字符,则需要分开到下一行。整数的scanf是%d。