C语言中的二维数组菜单
我的程序崩溃了 基本上,数据没有通过菜单选择的数组,我想知道是否有人可以检查一下,看看问题出在哪里C语言中的二维数组菜单,c,arrays,menu,2d,C,Arrays,Menu,2d,我的程序崩溃了 基本上,数据没有通过菜单选择的数组,我想知道是否有人可以检查一下,看看问题出在哪里 #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",
#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();
}
#包括
#包括
无效打印主菜单(字符菜单项[5][10],整数项){
int i;
对于(i=0;i<项的数量;i++){
printf(“%s\n”,菜单项[0][i]);
}
}
int main(){
字符菜单[5][10];
菜单[0][0]=“1-会员名单”;
菜单[0][1]=“2-等待列表”;
菜单[0][2]=“3-委员会名单”;
菜单[0][3]=“4-临时列表”;
菜单[0][4]=“5-退出”;
/*1-成员名单*/
菜单[1][0]=“1-无论什么”;
菜单[1][1]=“2-任意”;
打印菜单(菜单,5);
getch();
}
嗯,您的主要问题是将字符串分配给单个字符。您需要将其更改为:
char * menu [5][10];
我的意思是,您正在访问单个字符的位置,并试图在其中存储整个字符串。首先:您将函数声明为
print\u main\u menu
,但您将其称为print\u main
,但这应该会导致编译错误
第二:您错误地使用了二维数组,显然您将其用作C字符串的二维数组,但您将其声明为字符数组。
这将是正确的声明:
char* menu [5][10];
最后:许多数组索引没有初始化,这意味着它们可以指向任何地方,这很可能会产生分段错误并使应用程序崩溃
编辑:我也不确定是否可以像您这样将数组传递给函数。这样做很可能不是一个好主意。首先,您应该如下定义数组:
char*menu[5][10]代码>
作为参数而不是char菜单项[5][10]
您应该使用char*菜单项[5][10]代码>
这应该可以解决您的问题。上面的程序有很多错误。对于初学者,请更正main..from中的函数调用
print_menu()
到print_main_menu()
修复了这个问题,但我仍然有同样的问题。感谢大家的快速回复,它现在正在运行。我只需要添加一个选择系统,我应该很好。你肯定可以将数组传递给函数,但这通常不是一个好主意,因为它真正做的是传递指向第一个元素的指针(例如:menu
变成&menu[0]
)。最好明确地这样做;例如,将char*菜单项[5][10]
更改为char*(*菜单项)[10]
。然而,由于menu\u items
是非平凡的,因此最好定义一个数据结构来保存菜单项并传递它(或指向它的指针)。感谢您的精心设计,我有时尝试将数组传递给函数,但据我所知,从未成功过。我同意你的观点,将菜单封装在某种结构中。