异或运算的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);
我写了一个小程序来运行一个按位异或运算。这些值应插入命令行:
#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);