C语言问题,求解答

定义结构体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(i=0;i<3;i++)
{
if(strcmp(a,s[i].name)!=0)
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]的值是不是等于'#',所以说你无论怎么输入‘#’都不能终止循环,除非循环次数到了

追问

哦,我明白了。。非常感谢

温馨提示:内容为网友见解,仅供参考
第1个回答  2014-12-24
#include <stdio.h>
#include <string.h>

struct teleno {
char name[30];
char phone[18];
};

void chazhao(struct teleno s[],int n);

void main() {
struct teleno a[3];
int i = 0;
printf("输入3个人的信息:\n");
do {
scanf("%s%s",a[i].name,a[i].phone);
i++;
}while(a[i].name[0] != '#' && i < 3);
for(i = 0;i < 3;i++)
printf("%s\n",a[i].name,a[i].phone);
chazhao(a,3);
}

void chazhao(struct teleno a[],int n) {
char name[30];
int i = 0;
printf("输入要查找的人的姓名:");
scanf("%s",name);
for(i = 0;i < 3;i++) {
if(strcmp(name,a[i].name) == 0) {
printf("%s\n",a[i].name,a[i].phone);
return;
}
}
printf("没找到.\n");
}

追问

用你的程序运行了以后是这样,输完了#不能结束输入啊

追答

追问

题目要求输入#就结束输入

追答

你仔细看看代码就知道了。do循环循环条件是:a[i].name[0] != '#' && i < 3。

本回答被网友采纳
相似回答
大家正在搜