结构体
一.定义
struct Structname
{
类型1 变量名1;
类型2 变量名2;
类型3 变量名3;
类型4 变量名4;
....
}
以上就是结构体的基本形式
为了方便理解,接下来由我来举个例子
#include<stdio.h>
struct Stu //结构体的定义
{
char name[20]; // 定义姓名变量
int age;
char sex[10];
char phone[15];
};
int main()
{ //初始化
struct Stu A = {"zhangsan" ,19,man,1234567889990}; // 定义了一个A变量
//输出该变量
printf("%s %d %s %s",A.name,A.age,A.sex,A.phone);
return 0;
}
printf的输出方式可以换一种
//定义输出函数 print
void print(struct Stu *s)
{
printf(“%s %d %s %s \n”,(*s).name,(*s).age,(*s).sex,(*s).phone);
//或者为 printf(“%s %d %s %s \n”,s->name,s->age,s->sex,s->phone);
}
读取
读取方式包括getchar,scanf…
举个例子
#include<stdio.h>
int main()
{
char password[20]={0}; //定义字符数组password
printf("请输入密码\n");
//读取输入缓冲区的数据
scanf("%s",password);
//确认密码
printf("确认密码是否正确 Y\N .\n");
int ret = getchar();
if('Y'== ret)
{
printf("Yes");
}
else
{
printf("No");
}
return 0;
}
上述代码存在问题,当输入abcdefgh\n,程序不给你机会确实密码是否正确,直接输出No.
为什么?
原因
- 以回车键结尾输入数据到输入缓冲区,scanf会拿走除’\n’以外所有的字符,getchar直接读取’\n’,不给你机会输入Y或N,从而导致程序运行错误。
解决办法
- 在scanf的读取后再添加一条getchar语句
- getchar();// 清空输入缓冲区的数据
真的解决问题了吗?
当我们输入"abcd_ desf\n",程序仍然运行错误
到底该怎么有效的清空输入缓冲区呢???
利用循环
scanf语句后,加入以下语句
int ch=0;
while((ch = getchar())!='\n')
{
;
}
// 清空输入缓冲区