2011-06-04 36 views
2

我的程序崩溃了。2D阵列 - C中的菜单

基本上,数据没有通过数组进行菜单选择,我想知道是否有人可以检查它并查看问题出在哪里。

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

回答

3

首先:您宣布您的函数为print_main_menu,但您将其称为print_main,但这应该解析为编译错误。

其次:您正在使用二维数组不正确,显然你使用它作为C字符串的二维数组,但你声明它是一个字符数组。 这将是正确的声明:

char* menu [5][10]; 

最后:很多数组索引不会被初始化,这意味着它们可以指向任何地方其中将最有可能产生分段错误和程序崩溃。

编辑:我也不确定是否有可能将数组传递给像你这样做的函数。这样做很可能不是一个好主意。

+0

谢谢大家的快速响应,它现在正在运行。我只需要添加一个选择系统,我应该很好。 – Gary 2011-06-04 20:19:15

+0

你绝对可以传递一个数组来操作,但它通常是一个坏主意,因为它真正做的是传递一个指向第一个元素的指针(例如:'menu'变成'&menu [0]')。明确地做到这一点会更好;即将'char * menu_items [5] [10]'改为'char *(* menu_items)[10]'。但是,由于'menu_items'不重要,定义一个数据结构来保存菜单项并传递它(或者指向它的指针)会更好。 – 2011-06-04 22:43:33

+0

感谢您的阐述,我有时试图将一个数组传递给一个函数,但据我所知,它从来没有成功。我同意你的意见,将菜单封装在某种结构中。 – Constantinius 2011-06-05 13:51:54

1

那么,你的主要问题是你将字符串分配给单个字符。你需要将它更改为:

char * menu [5][10];     

我的意思是,你所访问单个字符的位置,并试图将整个字符串存储在那里。

+0

修正了Tnelsong,但我仍然有同样的问题。 – Gary 2011-06-04 20:13:37

0

首先,你应该定义你的数组如下:char * menu [5][10];

而作为参数,而不是char menu_items[5][10]你应该使用char *menu_items[5][10];

这应该解决您的问题。

0

上面的程序有很多错误。对于初学者来说,修改main..from中的函数调用可以从

print_menu()print_main_menu()