定义结构体teleno,包含两个成员:姓名,电话
定义一个查找某人电话号码的函数。
编写程序,输入若干人员的姓名和电话,以“#”结束,并查找某人的电话号。
#include<stdio.h>
#include<string.h>
struct teleno{
char name[10];
char a[10];
};
void chazhao(struct teleno s[],int n);
void main()
{
struct teleno s[3];
int i=0;
printf("输入3个人的信息:\n");
do
{
scanf("%s%s",s[i].name,s[i].a);
i++;
}
while
(s[i].name[0]!='#' && i<3);
for(i=0;i<3;i++)
{
printf("%s",s[i].name);
printf("%s",s[i].a);
printf("\n");
}
chazhao(s,3);
}
void chazhao(struct teleno s[],int n)
{
char a[10];
int i=0;
printf("输入要查找的人的姓名:\n");
scanf("%s",a);
for(i=0;i<3;i++)
{if(strcmp(a,s[i].name))
continue;
else
printf("%s",s[i].a);
}
}
我在输入的时候,输入#还是无法结束输入,该怎么解决啊?
追答输入信息的时候可以把代码改成下面这样子:
for(int i=0;i<3;i++)
{
scanf("%s",s[i].name);
getchar();
if(s[i].name[0]=='#')
break;
scanf("%s",s[i].a);
}
不过这样改的话,下面输出三个成员信息的时候就会有点问题,因为你中途停止了输入,所以说输入的成员的信息是不足三个的,然而输出的时候是三个成员,这样就会输出垃圾值,你可以在代码里面加一个变量来计算次数,然后根据次数选择输出的成员数量
可是为什么我那样写不能实现#结束呢?哪里错了?
追答因为你输入之后就执行i++啦,然后比如说现在是scanf("%s %s",s[i].name,s[i].a);现在我们假设它里面的变量i = 0,输入以后就会执行i++;
那么下面判断的就是s[1].name[0]的值是不是等于'#',所以说你无论怎么输入‘#’都不能终止循环,除非循环次数到了
哦,我明白了。。非常感谢
用你的程序运行了以后是这样,输完了#不能结束输入啊
追答题目要求输入#就结束输入
追答你仔细看看代码就知道了。do循环循环条件是:a[i].name[0] != '#' && i < 3。
本回答被网友采纳