如图,在运行Add_a_contact函数时想在name里输入带空格的字符串,name会和number跳到同一行去,且无法输入name,无论是用gets还是%[^\n]都是同样的输出结果。初学者求解,谢谢!
#include
#include
#include
struct Information
{
char name[255];
char number[255];
char email[255];
char department[255];
}Information;
struct Contact_list
{
int sizeofContact;
struct Information context[500];
};
void Print_contact_list (const struct Contact_list *a) {
int i = 0;
for (i = 0; i < a->sizeofContact; i++)
{
printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
}
}
void Add_a_contact (struct Contact_list *a)
{
printf("Name:");
scanf("%[^\n]",a->context[a->sizeofContact].name);
printf("Number:");
scanf("%s",a->context[a->sizeofContact].number);
printf("Email:");
scanf("%s",a->context[a->sizeofContact].email);
printf("Department:");
scanf("%s",a->context[a->sizeofContact].department);
a->sizeofContact++;
}
void menu()
{
printf("1) Print contact list\n");
printf("2) Add a contact\n");
printf("3) Modify a contact\n");
printf("4) Delete a contact\n");
printf("5) Search\n");
printf("6) Quit\n");
};
int main()
{
int x = 0;
struct Contact_list C;
do {
menu();
printf("Option:");
scanf("%d",&x);
switch(x)
{
case 1:
Print_contact_list(&C);
break;
case 2:
Add_a_contact(&C);
break;
case 6:
break;
}
} while (x);
return 0;
}
因为缓存问题导致,用getchar()读取掉缓存中的字符。
输入的字符串中包含空格,要用gets()方法。
修改如下:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
struct Information
{
char name[255];
char number[255];
char email[255];
char department[255];
}Information;
struct Contact_list
{
int sizeofContact;
struct Information context[500];
};
void Print_contact_list (const struct Contact_list *a) {
int i = 0;
for (i = 0; i < a->sizeofContact; i++)
{
printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
}
}
void Add_a_contact (struct Contact_list *a)
{
getchar();
printf("Name:");
gets(a->context[a->sizeofContact].name);
printf("Number:");
scanf("%s",a->context[a->sizeofContact].number);
printf("Email:");
scanf("%s",a->context[a->sizeofContact].email);
printf("Department:");
scanf("%s",a->context[a->sizeofContact].department);
a->sizeofContact++;
}
void menu()
{
printf("1) Print contact list\n");
printf("2) Add a contact\n");
printf("3) Modify a contact\n");
printf("4) Delete a contact\n");
printf("5) Search\n");
printf("6) Quit\n");
};
int main()
{
int x = 0;
struct Contact_list C;
do {
menu();
printf("Option:");
scanf("%d",&x);
switch(x)
{
case 1:
Print_contact_list(&C);
break;
case 2:
Add_a_contact(&C);
break;
case 6:
return 0;
}
} while (x);
return 0;
}
scanf("%d",&x); 后有换行符,你需要加getchar()接收掉换行符才行
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
struct Information
{
char name[255];
char number[255];
char email[255];
char department[255];
}Information;
struct Contact_list
{
int sizeofContact;
struct Information context[500];
};
void Print_contact_list (const struct Contact_list *a) {
int i = 0;
for (i = 0; i < a->sizeofContact; i++)
{
printf("%s\t%s\t%s %s\n",a->context[i].number,a->context[i].email,a->context[i].name,a->context[i].department);
}
}
void Add_a_contact (struct Contact_list *a)
{
printf("Name:");
scanf("%[^\n]",a->context[a->sizeofContact].name);
printf("Number:");
scanf("%s",a->context[a->sizeofContact].number);
printf("Email:");
scanf("%s",a->context[a->sizeofContact].email);
printf("Department:");
scanf("%s",a->context[a->sizeofContact].department);
a->sizeofContact++;
}
void menu()
{
printf("1) Print contact list\n");
printf("2) Add a contact\n");
printf("3) Modify a contact\n");
printf("4) Delete a contact\n");
printf("5) Search\n");
printf("6) Quit\n");
};
int main()
{
int x = 0;
struct Contact_list C;
do {
menu();
printf("Option:");
scanf("%d",&x);
getchar();
switch(x)
{
case 1:
Print_contact_list(&C);
break;
case 2:
Add_a_contact(&C);
break;
case 6:
break;
}
} while (x);
return 0;
}
您好,我是有问必答小助手,您的问题已经有小伙伴帮您解答,感谢您对有问必答的支持与关注!