2D Array - Меню в C - PullRequest
       1

2D Array - Меню в C

2 голосов
/ 05 июня 2011

Моя программа падает.

По сути, данные не проходят через массив для выбора меню, и мне интересно, может кто-нибудь проверить это и посмотреть, где проблема.

#include <stdio.h>
#include <stdlib.h>

void print_main_menu(char menu_items[5][10], int number_of_items) {
    int i;
    for (i = 0; i < number_of_items; i++) {
        printf("%s\n", menu_items[0][i]);
    }
}

int main () {
    char menu [5][10];
    menu [0][0] = "1 - Membership List";
    menu [0][1] = "2 - Waiting List";
    menu [0][2] = "3 - Committee List";
    menu [0][3] = "4 - Temporary List";
    menu [0][4] = "5 - Exit";

    /* 1 - Membership List */
    menu[1][0] = "1 - Whatever";
    menu[1][1] = "2 - Whatever";

    print_menu(menu, 5);

    getch();
}

Ответы [ 4 ]

3 голосов
/ 05 июня 2011

Прежде всего: вы объявили свою функцию как print_main_menu, но вы называете ее как print_main, но это должно привести к ошибке компиляции.

Во-вторых: вы используете двумерный массив неправильно, очевидно, вы используете его как двумерный массив строк C, но вы объявили его как массив символов. Это была бы правильная декларация:

char* menu [5][10];

Наконец: многие индексы массива не инициализированы, что означает, что они могут указывать в любом месте , что, скорее всего, приведет к ошибке сегментации и аварийному завершению вашего приложения.

РЕДАКТИРОВАТЬ: Я также не уверен, возможно ли передать массив функции, как вы делаете это. Скорее всего, это не очень хорошая идея.

1 голос
/ 05 июня 2011

Ну, ваша главная проблема в том, что вы назначаете строки отдельным символам.Вам нужно изменить его на:

char * menu [5][10];                

Я имею в виду, что вы получаете доступ к позициям отдельных символов и пытаетесь сохранить там целую строку.

0 голосов
/ 05 июня 2011

В указанной программе много ошибок. Для начала исправьте вызов функции в main..from

print_menu() до print_main_menu().

0 голосов
/ 05 июня 2011

Прежде всего, вы должны определить свой массив следующим образом: char * menu [5][10];

И в качестве аргумента вместо char menu_items[5][10] вы должны использовать char *menu_items[5][10];

Это должно решить вашу проблему.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...