题目:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
typedef struct CAT
{
int skincolour;
int eyescolour;
int feather;
}cat;
char skin[3][5]={"黑色","灰色","棕色"};//中文一个字占两字节再加上'\0',一共5个字节
char eye[3][5]={"绿眼","蓝眼","棕眼"};
char fea[2][5]={"长毛","短毛"};
void checkgraybrown(cat **p,int n);
void checkblack(cat **p,int n);
int main(){
srand(time(NULL));
cat *cats[100]={NULL};//都先初始化为空指针
int i=0,j;
while(getchar()=='\n'){
cats[i]=(cat *)malloc(sizeof(cat));//动态分配内存,每按一次回车,随机分配一块内存给猫的信息存储
cats[i]->skincolour=rand()%3;//利用下标来确定猫的特性
cats[i]->eyescolour=rand()%3;
cats[i]->feather=rand()%2;
printf("一只%s%s%s猫被放进了围栏\n",skin[cats[i]->skincolour],eye[cats[i]->eyescolour],fea[cats[i]->feather]);
i++;
}
checkgraybrown(cats,i);
checkblack(cats,i);
for(j=0;j<i;j++){
free(cats[j]);
}
return 0;
}
void checkgraybrown(cat **p,int n)//二级指针存一级指针地址
{
int i,gray=0,brown=0;
for(i=0;i<n;i++){
if(p[i]->skincolour==1)gray++;
if(p[i]->skincolour==2)brown++;
}
printf("%d,%d\n",gray,brown);
if(gray>brown)printf("灰猫会和棕色猫打架!\n");
}
void checkblack(cat **p,int n){
int i,brown=0,green=0,blue=0;
for(i=0;i<n;i++){
if(p[i]->skincolour==0){
if(p[i]->eyescolour==2)brown++;
if(p[i]->eyescolour==0)green++;
if(p[i]->eyescolour==1)blue++;
}
}
printf("%d,%d,%d\n",brown,green,blue);
if(brown==1 && green>=1 && blue>=1){
printf("黑猫之间会发生争斗!\n");
}
}