c primer plus 第十四章课后编程4题

//编写有俩个成员的结构,第一个成员是社会保险号,第二个成员是有三个成员
//的结构,1.成员代表名。2。中间名。3。姓
//程序a.
#include <stdio.h>
#include <string.h>
#define MAX 20
#define SZ 5
struct fname{
char name[MAX];
char zname[3];
char sname[MAX];
};

struct card{
char number[MAX];
struct fname k;
};
char *s_gets(char *st,int n);

//接受结构指针,作用修改中间名。
void handle_sname(struct card *);

int main(void)
{
//声明一个包含5个card类结构的数组
struct card n[SZ];
//声明一个card类的指针,用于给函数传递结构
struct card *d;
d=&n[0];
int count=0;
int index=0; //
printf(“请输入社保号。\n”);
printf(“按回车键结束。\n”);
while(count<5 && s_gets(n[count].number, MAX)!=NULL
&& n[count].number[0]!=’\0’)
{
printf(“请输入名:\n”);
s_gets(n[count].k.name, MAX);
printf(“请输入中间名,如果没有直接按回车键.\n”);
s_gets(n[count].k.zname,2);
printf(“请输入姓:\n”);
s_gets(n[count++].k.sname,MAX);
if(count<SZ)
printf(“输入下一个社保号。\n”);
index++;

}
handle_sname(d);
for(count=0;count<index;count++)
{
if(n[count].k.zname[0]!=’\0’)

  printf("%s,%s %s -- %s\n",n[count].k.name,n[count].k.sname,
     n[count].k.zname,n[count].number);
else
    printf("%s,%s -- %s\n",n[count].k.name,n[count].k.sname,
           n[count].number);

}

return 0;
}

void handle_sname(struct card *names)
{
int i;
for(i=0;i<SZ;i++)
if(names->k.zname[0]!=’\0’)
{
names->k.zname[1]=’.’;
names->k.zname[2]=’\0’;
names++;
}

}

char *s_gets(char *st, int n)
{
char *ret_val;
char *find;

ret_val=fgets(st,n,stdin);
if(ret_val)
{
find=strchr(st,’\n’);
if(find)
*find=’\0’;
else
while(getchar()!=’\n’)
continue;
}
return ret_val;
}

//程序b.
#include <stdio.h>
#include <string.h>
#define MAX 20
#define SZ 5
#define K 3
struct fname{
char name[MAX];
char zname[K];
char sname[MAX];
};

struct card{
char number[MAX];
struct fname k;
};
char *s_gets(char *st,int n);

//把结构fname类里的成员 zname[0]的值传递给函数,返回一个fname类结构
struct fname handle_sname(char n);

int main(void)
{
struct card n[SZ];
struct card a;
int count=0;
int index=0;
int i;

printf(“请输入社保号。\n”);
printf(“按回车键结束。\n”);
while(count<5 && s_gets(n[count].number, MAX)!=NULL
&& n[count].number[0]!=’\0’)
{
printf(“请输入名:\n”);
s_gets(n[count].k.name, MAX);
printf(“请输入中间名,如果没有直接按回车键.\n”);
s_gets(n[count].k.zname,2);
printf(“请输入姓:\n”);
s_gets(n[count++].k.sname,MAX);
if(count<SZ)
printf(“输入下一个社保号。\n”);
index++;

}
for(count=0;count<index;count++)
{
if(n[count].k.zname[0]!=’\0’)
{
//调用函数,修改代表中间名的结构成员的值
a.k=handle_sname(n[count].k.zname[0]);
for(i=0;i<K;i++)
n[count].k.zname[i]=a.k.zname[i];

    printf("%s,%s %s -- %s\n",n[count].k.name,n[count].k.sname,
          n[count].k.zname, n[count].number);
}
else
    printf("%s,%s -- %s\n",n[count].k.name,n[count].k.sname,
           n[count].number);

}

return 0;
}
struct fname handle_sname(char n)
{
struct fname sk;
sk.zname[0]=n;
sk.zname[1]=’.’;
sk.zname[2]=’\0’;

return sk;
}

char *s_gets(char *st, int n)
{
char *ret_val;
char *find;

ret_val=fgets(st,n,stdin);
if(ret_val)
{
find=strchr(st,’\n’);
if(find)
*find=’\0’;
else
while(getchar()!=’\n’)
continue;
}
return ret_val;
}

发布了85 篇原创文章 · 获赞 1 · 访问量 1889

猜你喜欢

转载自blog.csdn.net/Tekkenwxp/article/details/102646337