如何修复被忽略的scanf函数

如何修复被忽略的scanf函数,c,C,我试图使用位运算符在一个无符号整数中保存4个字符。然而,它只是跳过scanf并打印下一条消息。这是我的密码: printf("1st: "); scanf("%c", &a); printf("2nd: "); scanf("%c", &b); printf("3rd: "); scanf("%c", &c); printf("4th: "); scanf("%c", &d); num = a; num |= b << 8; num |= c

我试图使用位运算符在一个无符号整数中保存4个字符。然而,它只是跳过scanf并打印下一条消息。这是我的密码:

printf("1st: ");
scanf("%c", &a);

printf("2nd: ");
scanf("%c", &b);

printf("3rd: ");
scanf("%c", &c);

printf("4th: ");
scanf("%c", &d);

num = a;
num |= b << 8;
num |= c << 16;
num |= d << 24;

printf("result: %x\n", num);
但实际产出却很低

1st: a
2nd: 3rd: b
4th: result: a620a61

如何解决此问题?

Enter
键也被视为新字符或
\n
。这就是为什么
b
改为
c

如果您停下来查看结果变量num包含的内容:

0A620A61


识别出字符0x0A是换行符,然后你就会意识到你正在处理4个字符。在检索每个新字符(否则它仍然存在)之前,您需要从Scanf缓冲区中删除换行字符。

您的行为有两大部分-变量的输入,以及将所有(4)个值串联到num变量中。删除scanf()声明,并使用刚刚声明的变量(char a='a',etc)来实现这一点,然后集中精力包括scanf()
1st: a
2nd: 3rd: b
4th: result: a620a61