结构体及输入语句

结构体

一.定义

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')
	{
		;
	}
//	 清空输入缓冲区

//补充scanf的相关知识

1.scanf以第一个非空字符开始读取,直到遇见空白符为止

2.不能读取空格,制表符,因为被当作"分隔符"处理

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值