为什么我的代码无法运行?

时间:2015-12-28 14:18:39

标签: c

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

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

1 个答案:

答案 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;
}