异或运算的C程序,运算符由scanf输入

C program for xor operation, operators entered by scanf

我写了一个小程序来运行一个按位异或运算。这些值应插入命令行:

#include <stdio.h>

int main()
{
    unsigned char x = 0, y= 0;

    printf("This program performs a Bitwise XOR operation of two chars\n");
    printf("Enter a value for the first variable: ");
    scanf("%i",&x);

    printf("Enter a value for the second variable: ");
    scanf("%i",&y);
    printf("1. Value = %i\n2. Value = %i\n",x,y);

    y ^= x;

    printf("Result XOR-Operation = %i", y);
    printf("\nResult in hex: 0x%x", y);

    return 0;
}

当我 运行 程序的第一个值是 returns 0...

命令行输出:

1 This program performs a Bitwise XOR operation of two chars
2 Enter a value for the first variable: 10
3 Enter a value for the second variable: 5
4 1. Value = 0
5 2. Value = 5
6 Result XOR-Operation = 5
7 Result in hex: 0x5

我正在使用 gcc 编译器,运行 它在 windows 命令行中。我可能必须使用指针吗?找不到关于此主题的内容...

提前致谢!

%i 格式说明符需要 int *,但您传递给它的是 unsigned char *。因为后者指向较小的数据类型,所以 scanf 将尝试写入它想要写入的变量的边界。这导致 undefined behavior.

您想使用 hh 修饰符(对于 char)告诉 scanf 期望正确的指针类型以及 u 格式说明符 unsigned.

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