我在显示程序输入时遇到问题。有人可以帮我解决我的问题吗?
我希望我的程序看起来像这样。但是当我输入多个名字和号码时我的程序只显示一个名字,这很令人困惑
#pragma warning (disable:4996)
#include<stdio.h>
#include<string.h>
#include<ctype.h>
#include<stdlib.h>
struct contact {
char name[30];
char number[12];
};
int main() {
int menu;
struct contact contact;
int flag, flag_1, flag_2, flag_3;
int i;
start:
printf("Phone Book\n");
printf("==========\n");
printf("1. Add New Contact\n");
printf("2. View List Contact\n");
printf("3. Search Contact\n");
printf("4. Delete Contact\n");
printf("5. Exit\n");
printf("choose menu: ");
scanf("%d", &menu); fflush(stdin);
system("cls");
switch (menu) {
case 1: printf("Add New Contact\n\n");
do {
flag = flag_1 = 1;
printf("input name [1..30 char]: ");
scanf(" %[^\n]", contact.name);
if (!isalpha(contact.name[0])) {
flag = 0;
printf("First letter of name should be an alphabet (A-Z or a-z)\n");
}
if (strlen(contact.name) > 30) {
flag_1 = 0;
printf("Length of name should be between 1 and 30 characters\n");
}
} while (flag == 0 || flag_1 == 0);
do {
flag_2 = flag_3 = 1;
printf("Input phone number[6..12 digits]: ");
scanf(" %[^\n]", contact.number);
for (i = 0; i < strlen(contact.number); i++) {
if (!isdigit(contact.number[i])) {
flag_2 = 0;
}
}
if (flag_2 == 0) {
printf("Phone numbers should only contain digits (0-9)\n");
}
if (strlen(contact.number) < 6 || strlen(contact.number) > 12) {
flag_3 = 0;
printf("Length of phone numbers should be between 6 and 12 digits\n");
}
} while (flag_2 == 0 || flag_3 == 0);
printf("\n");
printf("New contact successfully added!\n\n");
printf("Name : %s \nNumber : %s\n\n", contact.name, contact.number);
printf("Press Enter to continue...");
getchar();
getchar();
system("cls");
goto start;
case 2:
char c;
int i;
printf("View List Contact\n\n");
printf(" # Name Phone Number\n");
for (c = 'A'; c <= 'Z'; c++) {
for (i = 1; ; i++) {
if (c == contact.name[0]) {
printf("%c %d. %s %s", c, i, contact.name, contact.number);
}
break;
}
}
getchar();
}
getchar();
return 0;
}
最佳答案
目前,您仅使用 name
和 number
元素(均为 char
数组)创建一个 contact
变量。这就是为什么您只能记录一个联系人。
为了做到这一点,首先,您需要创建一个 contact
数组并使用一个变量来跟踪您当前拥有的联系人数量:
struct contact {
char name[30];
char number[12];
};
int main() {
int menu;
struct contact contacts[30]; //add this
int flag, flag_1, flag_2, flag_3;
int i;
char c;
int noOfContact = 0; //add this
然后,对于情况 1,您应该指向要根据 noOfContact
给出的索引创建的 contacts
数组中的 contact
像这样
case 1: printf("Add New Contact\n\n");
do {
flag = flag_1 = 1;
printf("input name [1..30 char]: ");
scanf(" %[^\n]", contacts[noOfContact].name); //notice the noOfContact index is used
if (!isalpha(contacts[noOfContact].name[0])) {
flag = 0;
printf("First letter of name should be an alphabet (A-Z or a-z)\n");
}
if (strlen(contacts[noOfContact].name) > 30) {
flag_1 = 0;
printf("Length of name should be between 1 and 30 characters\n");
}
} while (flag == 0 || flag_1 == 0);
do {
flag_2 = flag_3 = 1;
printf("Input phone number[6..12 digits]: ");
scanf(" %[^\n]", contacts[noOfContact].number);
for (i = 0; i < strlen(contacts[noOfContact].number); i++) {
if (!isdigit(contacts[noOfContact].number[i])) {
flag_2 = 0;
}
}
if (flag_2 == 0) {
printf("Phone numbers should only contain digits (0-9)\n");
}
if (strlen(contacts[noOfContact].number) < 6 || strlen(contacts[noOfContact].number) > 12) {
flag_3 = 0;
printf("Length of phone numbers should be between 6 and 12 digits\n");
}
} while (flag_2 == 0 || flag_3 == 0);
printf("\n");
printf("New contact successfully added!\n\n");
printf("Name : %s \nNumber : %s\n\n", contacts[noOfContact].name, contacts[noOfContact].number);
printf("Press Enter to continue...");
noOfContact++;
getchar();
getchar();
system("cls");
goto start;
类似地,在情况 2 中,您应该创建从 0 到 noOfContact
的迭代,以一一显示您的 contact
,如下所示。
case 2:
printf("View List Contact\n\n");
printf(" # Name Phone Number\n");
for (i = 0; i < noOfContact; ++i)
printf("%c %d. %s %s\n", c, i, contacts[i].name, contacts[i].number);
getchar();
}
键是 contact
数组和 noOfContact
关于c - 如何在c编程中显示输入并进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34326660/