代码如图一
为什么运行结果是这样😭图二
为什么字数还不够啊不科学啊
打印语句 一开始 不要加 %c ,x 和y 还没初始化呢
修改如下:
#include <stdio.h>
int main()
{
char x, y;
printf("请输入用户名:");
scanf("%c",&x);
getchar(); // 接收上面的换行
printf("请输入密码:");
scanf ("%c",&y);
if(x=='1'&&y=='1')
printf("欢迎\n") ;
else if(x!='1'&&y=='1')
printf("用户名错\n");
else if (x=='1'&&y!='1')
printf("密码错\n");
else
printf("用户名和密码错\n");
return 0;
}
不知道你这个问题是否已经解决, 如果还没有解决的话:先来加单的说一下为什么需要内存对齐:
- CPU对内存的读取不是连续的,而是分成块读取的,块的大小只能是1,2,4,8,16…字节
- 当读取的数据未对齐,则需要两次总线周期来访问内存才能将整个数据读完,这样会降低CPU性能
- 某些硬件平台只能从规定的相对地址处读取特定类型的数据,否则产生硬件异常
什么是内存对齐?
例如下图中的两个结构体的大小是不一样的,因为它们的内存布局是不一样的:
它们的内存布局如下图:
拓展: #pragma pack 用于指定内存的对齐方式。用于修改编译器的默认对齐方式
一般来讲,在Linux系统中,编译器的默认对我方式是4字节对齐。下图中的代码,可以将对齐方式修改为1字节对齐: