C语言学习第一天任务(适合有基础之后的巩固)//输入与输出// memset()函数讲解//strcmp()函数讲解

C第一天任务

请 根据 输入 梯形,三角形, 正方形
对应输出相应形状
如下:
在这里插入图片描述

答案代码:

#include <stdio.h>

int main()
{
	char str[20];
	
	memset(str,0,20);
	
	printf("请输入 梯形/三角形/正方形\n");
	
	scanf("%s",str);
		
	if(!strcmp(str,"三角形"))
	{
		printf("    *    \n");
		printf("   ***   \n");
		printf("  *****  \n");
		printf(" ******* \n");		
	}
	if(!strcmp(str,"梯形"))
	{
		printf("    ****    \n");
		printf("   ******   \n");
		printf("  ********  \n");
		printf(" ********** \n");	
	}
	if(!strcmp(str,"正方形"))
	{
		printf(" *******  \n");
		printf(" *******  \n");
		printf(" *******  \n");
		printf(" *******  \n");			
	}
	
	return 0;
}
有关memset()函数的讲解

void *memset(void *s, int ch, size_t n);(int ch可以是char或int)

将s所指向的某一块内存中的每个字节的内容全部设置为ch指定的ASCII值, 块的大小由第三个参数指定,这个函数通常为新申请的内存做初始化工作, 其返回值为指向S的指针。

memset按字节赋值。

需要的头文件
在C中 <string.h>
在C++中 

void *memset(void *s, int ch, size_t n);

函数解释:将s中前n个字节 (typedef unsigned int size_t)用 ch 替换并返回 s 。
memset:作用是在一段内存块中填充某个给定的值,它是对较大的结构体或数组进行清零操作的一种最快方法。

memset()函数对结构体清零:
#include <stdio.h>
#include <string.h>

typedef struct
{	
	short a;
	char b;
} data;
//memset 1.add 2.val 3.size


void main()
{
	int a[10];
	data mydata,*n;
    int  *p;
	//memset((char *)&mydata,0,sizeof(mydata));//把这个结构体给清零
	//memset((char *)&mydata,'a',sizeof(mydata));//把这个结构体的每个字节空间给赋值为a
	memset((char *)&mydata,1,sizeof(mydata));
    printf("%d,%d",mydata.a,mydata.b);
}

以上程序中,是对data这个struct的每一个对象的每一个字节赋值,赋值为1;
这个程序的 运行结果是:
101,1
为什么会是这样?

	memset((char *)&mydata,1,sizeof(mydata));

这个函数的意思是什么?
memset(add,val,size); 第一个参数是地址,第二个参数是数值,第三个参数是开辟的空间大小
参数1:(char *)&mydata:强制把mydata这个struct转化为字符型指针,这样在这个地址+1的时候,跳过的只是一个字节,而不是整个mydata 结构体的大小
参数2:1:就是val的值,要在那个字节空间里赋值多少
参数3:sizeof(mydata):取这个结构体的大小,有关结构体大小的判断,需要专门的文章去讲解,我会在之后补充到;取结构体大小,我们就在这个大小里面搞事情。就是第一个参数,先是结构体的首地址,之后地址加一后,跳转到下一个字符空间,再赋值,再地址加一。循环往复,一直到sizeof(mydata)这个空间大小结束为止;

所以,我们看我们刚开始定义的结构体变量short a,是两个字节的第一个字节被赋值为1,第二个字节被赋值为1,出来的结果就是101;char b,是一个字节的,单个字节被赋值为1,出来的结果是1;
.
.
.
.

strcmp(str1,str2)函数讲解

strcmp 两组字符串比较
输出等于0 比对两组字符串相同
大于0 前面字符串大学后面
小于0 后面字符串 大于前面
这里建议大家只用==0结果,因为我们常常判断两个字符串是否相同。

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值