我是 C 新手,我正在努力创建典型的初学者电话簿应用程序。我在谷歌上看到了很多不同的链接,这些链接显示了电话簿应用程序的示例,但没有显示我想要完成的任务。基本上我想要做的是创建一个具有名字、姓氏和 2 个电话号码的结构,然后我想为每个创建 2 个不同的函数。对于结构中的每个变量,我都会有一个设置输入,然后另一个读取输入。这给了我 8 个函数,但是我想再添加三个函数,一个用于向结构中添加 11each 新合同,一个用于删除联系人,然后一个用于查看电话簿。现在我专注于添加功能和查看功能。我的问题是我得到了非常奇怪的输出。
#include<stdio.h>
#include<conio.h>
typedef struct friends_contact{
char First_Name[10];
char Last_Name[10];
char home[15];
char cell[15];
}fr;
void menu(fr*friends ,int* counter,int user_entry, char* nullStr,int i);
void setFirst(fr*,int *,int i);
char getFirst(fr*,int*,char*,int i);
void setLast(fr*friends, int* counter, int i);
char getLast(fr*friends ,int* counter,char *nullStr, int i);
void add_contact(fr*friends,int* counter,int i);
void show_contact(fr*friends ,int* counter,char *nullStr, int i);
int main()
{
int user_entry=0;
fr friends[5];
int counter=0;
char nullStr[21] = {"\0"};
int i=0;
menu(friends, &counter,user_entry,nullStr,i);
getch();
return 0;
}
void menu(fr*friends,int* counter,int user_entry,char *nullStr,int i)
{
do{
printf("Phone Book Application\n");
printf("1) Add friend\n2) Delete friend\n3) Show a friend\n4) Show phonebook\n5)Exit);
scanf("%d", &user_entry);
if(user_entry==1){
add_contact(friends,counter,i);
}
if(user_entry==4){
show_contact(friends, counter,nullStr,i);
}
}while(user_entry!=5);
}
void setFirst(fr*friends, int* counter, int i)
{
(*counter)++;
printf("Enter a first name \n");
scanf("%s",&friends[*counter-1].First_Name);
}
void setLast(fr*friends, int* counter, int i)
{
(*counter)++;
printf("Enter a first name \n");
scanf("%s",&friends[*counter-1].Last_Name);
}
char getFirst(fr*friends ,int* counter,char *nullStr, int i)
{
for(i=0; i<*counter; i++)
{
if (strcmp(nullStr, friends[i].First_Name) != 0)
{
printf("%s\n", friends[i].First_Name);
}
}
return *friends[i].First_Name;
}
char getLast(fr*friends ,int* counter,char *nullStr, int i)
{
for(i=0; i<*counter; i++)
{
if (strcmp(nullStr, friends[i].Last_Name) != 0)
{
printf("%s\n", friends[i].Last_Name);
}
}
return *friends[i].Last_Name;
}
void add_contact(fr*friends,int* counter,int i)
{
setFirst(friends,counter,i);
setLast(friends,counter,i);
}
void show_contact(fr*friends ,int* counter,char *nullStr, int i)
{
getFirst(friends,counter,nullStr,i);
getLast(friends,counter,nullStr,i);
}
这是我现在得到的输出:
Enter a first name
john
Enter a first name
smith
Phone Book Application
1) Add friend
2) Delete friend
3) Show a friend
4) Show phone book
5) Exit
4
john
╝ ♠
smith
当我在列表中添加另一个名称时,我的结果同样奇怪。奇怪的是,我在创建姓氏函数后才开始遇到这些问题。当我只输入名字时,它工作得很好。有任何想法吗?