#include"contant.h"
int main()
{
struct Contact con;
Init(&con);
printf("\t\t\tSuccessfully Initialized!!\t\t\n");
int sel;
do
{
menu();
scanf("%d", &sel);
switch (sel)
{
case 1:
Add(&con);
break;
case 2:
//Del();
break;
case 3:
break;
case 4:
break;
case 5:
Show(&con);
break;
case 0:
exit(0);
default:
printf("Wrong input Please try again!\n");
break;
}
} while (sel);
return 0;
}
#define _CRT_SECURE_NO_WARNINGS
#include
#include
#include
#define Max_Name 200
#define Max_Tel 20
#define NumberOfMem 10
void menu();
void Init();
void Add();
void Show();
void menu()
{
printf("\t\t\t***************************************\t\t\n");
printf("\t\t\t**************1.Add 2.Del**********\t\t\n");
printf("\t\t\t***************************************\t\t\n");
printf("\t\t\t***************3.Search 4Modify******\t\t\n");
printf("\t\t\t***************************************\t\t\n");
printf("\t\t\t***************5.Show 0.Exit******\t\t\n");
}
struct PeoIfor
{
char name[Max_Name];
char tel[Max_Tel];
char sex[2];
};
struct Contact
{
struct PeoIfor data[NumberOfMem];
int size;
};
void Init(struct Contact* ps)
{
memset(ps->data, 0, sizeof(ps->data));
ps->size = 0;
}
void Add(struct Contact* ps)
{
if (ps->size == NumberOfMem)
{
printf("The contact is full,you can't add the contact\n");
}
else
{
printf("Please type the contact's name:\n");
scanf("%s", ps->data[ps->size].name);
printf("Please tpye the contact's telephone number\n");
scanf("%s", ps->data[ps->size].tel);
printf("What's the sex of the contact you just added?\n");
scanf("%s", ps->data[ps->size].sex);
ps->size++;
printf("**************Sucessfully Added!*****************\n");
printf("There's %d people in your contactn\n", ps->size);
}
}
void Show(const struct Contact *ps)
{
printf("%5s\t%3s\t%12s\n", "|Name|", "|Sex|", "|Tele|");
if (ps->size == 0)
{
printf("The contact is void!\n");
}
else
{
for (int i = 0; i < ps->size; i++)
{
printf("%5s\t%3s\t %12s\n",
ps->data[i].name,
ps->data[i].sex,
ps->data[i].tel);
}
}
}
char sex[2];
这个定义太小了,一个中文占2字节,加上结束符,起码要定义成
char sex[3];
否则就出现你那个情况,
另外这也是网络安全所说堆栈溢出的原因所在
因为你第一次输入张三(空格或换行)电话(空格或换行)男,后没有空格或换行,然后继续输入李四(空格或换行)电话(空格或换行)女。所以李四与前面的人性别男之间无换行或空格,就会被当成前面的人性别“男”这一个输入还没有输完。
所以你可以在每次输入性别后加一个空格或换行,这样告诉计算机你性别已输完。