У меня есть некоторые проблемы с моим кодом. моя проблема заключается в «контакте с списком», мне нужно выполнить сортировку строк, и когда я вводим имя без пробела, он работает, но когда я вводим имя с пробелом, моя программа показывает неправильный вывод.Почему мой код не работает?
#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;
}
Btw, 'fflush (stdin)' - неопределенное поведение. – ameyCU
@cad: p мои руки холодные, и кстати я написал _fflaush_. – ameyCU
Покажите нам выход. –