私は C が初めてで、典型的な初心者向けの電話帳アプリを作成しようとしています。Google で電話帳アプリの例を示すさまざまなリンクを見てきましたが、私が達成しようとしていることを示すものは何もありません。基本的に私がやりたいことは、名、姓、および 2 つの電話番号を持つ構造を作成し、それぞれに対して 2 つの異なる関数を作成することです。構造内の変数ごとに、入力を設定する変数と、入力を読み取る変数があります。これで 8 つの機能が得られますが、さらに 3 つの機能を追加したいと思います。1 つは新しい契約ごとに構造体に 11 を追加する機能、1 つは連絡先を削除する機能、もう 1 つは電話帳を表示する機能です。今は追加機能と閲覧機能に力を入れています。私の問題は、非常に奇妙な出力が得られることです。
#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
リストに別の名前を追加すると、結果は同様に奇妙になります。奇妙なことに、姓の関数を作成した後にこれらの問題が発生し始めました。名だけを入力すると、うまくいきました。何か案は?