gpt4 book ai didi

c - 为什么我的代码无法工作?

转载 作者:行者123 更新时间:2023-11-30 21:43:44 25 4
gpt4 key购买 nike

我的代码有一些问题。我的问题是在“查看列表联系人”中,我需要进行字符串排序,当我输入不带空格的名称时它可以工作,但是当我输入带空格的名称时,我的程序显示错误的输出。

#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[100];
int flag, flag_1, flag_2, flag_3;
int i;
int n = 0;

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[n].name);

if (!isalpha(contact[n].name[0])) {
flag = 0;
printf("First letter of name should be an alphabet (A-Z or a-z)\n");

}

if (strlen(contact[n].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[n].number);

for (i = 0; i < strlen(contact[n].number); i++) {
if (!isdigit(contact[n].number[i])) {
flag_2 = 0;
}
}
if (flag_2 == 0) {
printf("Phone numbers should only contain digits (0-9)\n");
}
if (strlen(contact[n].number) < 6 || strlen(contact[n].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("Press Enter to continue...");
n++;
getchar();
getchar();
system("cls");
goto start;

case 2:

char temp[30];
int i, j, check;
printf("View List Contact\n\n");
printf(" # Name Phone Number\n");

for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
check = strcmp(contact[i].name, contact[j].name);
if (check < 0) {
strcpy(temp, contact[i].name);
strcpy(contact[i].name, contact[j].name);
strcpy(contact[j].name, temp);

strcpy(temp, contact[i].number);
strcpy(contact[i].number, contact[j].number);
strcpy(contact[j].number, temp);
}
}
}


for (i = 0; i < n; i++) {
printf(" %d. %s %20s \n", i+1, contact[i].name, contact[i].number);
}



getchar();
}

getchar();
return 0;
}

最佳答案

我没看出有什么问题。当我运行代码时,它给了我错误,所以我移动了一些变量,它的运行方式就像名称中带有空格一样。

这是我移动后的代码:

char temp[30];
int j, check;

在全局变量中。

#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[100];
int flag, flag_1, flag_2, flag_3;
int i;
int n = 0;
char temp[30];
int j, check;

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[n].name);

if (!isalpha(contact[n].name[0])) {
flag = 0;
printf("First letter of name should be an alphabet (A-Z or a-z)\n");

}

if (strlen(contact[n].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[n].number);

for (i = 0; i < strlen(contact[n].number); i++) {
if (!isdigit(contact[n].number[i])) {
flag_2 = 0;
}
}
if (flag_2 == 0) {
printf("Phone numbers should only contain digits (0-9)\n");
}
if (strlen(contact[n].number) < 6 || strlen(contact[n].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("Press Enter to continue...");
n++;
getchar();
getchar();
system("cls");
goto start;

case 2:


printf("View List Contact\n\n");
printf(" # Name Phone Number\n");

for (i = 0; i < n; i++) {
for (j = 0; j < n; j++) {
check = strcmp(contact[i].name, contact[j].name);
if (check < 0) {
strcpy(temp, contact[i].name);
strcpy(contact[i].name, contact[j].name);
strcpy(contact[j].name, temp);

strcpy(temp, contact[i].number);
strcpy(contact[i].number, contact[j].number);
strcpy(contact[j].number, temp);
}
}
}


for (i = 0; i < n; i++) {
printf(" %d. %s %20s \n", i+1, contact[i].name, contact[i].number);
}



getchar();
}

getchar();
return 0;
}

关于c - 为什么我的代码无法工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34495215/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com