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结果,因为我们常常判断两个字符串是否相同。