2015-12-28 18 views
-6

У меня есть некоторые проблемы с моим кодом. моя проблема заключается в «контакте с списком», мне нужно выполнить сортировку строк, и когда я вводим имя без пробела, он работает, но когда я вводим имя с пробелом, моя программа показывает неправильный вывод.Почему мой код не работает?

#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; 
} 
+0

Btw, 'fflush (stdin)' - неопределенное поведение. – ameyCU

+1

@cad: p мои руки холодные, и кстати я написал _fflaush_. – ameyCU

+0

Покажите нам выход. –

ответ

1

Я не вижу в этом ничего плохого. Когда я запускал код, он дал мне ошибки, поэтому я переместил некоторые переменные, и он запускается, как и в пробелах в именах.

это код, который я есть после переезда:

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; 
} 
Смежные вопросы