我正在尝试在C中创建一个菜单,该菜单使用开关和大小写来有效导航。
我可以到达第一个子菜单,但是在输入值之后,它也会打印顶部菜单。另外,我还需要知道如何定义要输入的内容,以便知道老师是否要输入作业1、2或3的数据。
我将如何去做?
谢谢您。
编辑:
我对函数有一些基本的了解,但还不足以使用数组和指针,听起来像它工作得很好,并且是一个很好的解决方案。
这里是完整的代码。同样,我刚刚开始学习如何对任何草率的代码使用C和道歉。
int main(void)
{
/* Function Prototypes */
int menu;
int opt1;
menu = 0;
while (menu !=4)
{
/*Display menu with 4 numbered options:*/
printf("\n Main Menu\n");
printf("\n Type a number to enter your choice.\n");
/*1. Enter Marks*/
printf("\n\n1. Enter Marks\n");
/*2. Display a particular students marks*/
printf("2. Display Specific Stucdents Mark\n");
/*3. Supervisor mode*/
printf("3. Supervisor Mode\n");
/*4. Exit program*/
printf("4. Exit Program\n\n");
printf("Enter option: \n");
scanf("%d", &menu);
while (menu > 4 || menu < 1)
{
printf("Error, please enter a valid option\n");
scanf("%d", &menu);
}
switch (menu)
{
case 1:
{
system("cls");
printf("1. Enter Marks\n");
printf("2. Return to menu\n");
scanf("%d", &opt1);
if (opt1 = 1)
switch (opt1)
{
case 1:
{
printf("Is the mark for coursework 1, 2 or 3?");
}
}
/*Are the marks for course work 1, 2 or 3?*/
/*Enter Marks*/
/*Display results table*/
/*Option to edit*/
/*Confirm and return to menu*/
}
错误的几件事清单:
scanf("%d", &j);
您必须测试scanf
的返回值。它将告诉您是否读取了有效数字。
printf("Please enter the number of students...);
scanf("%d", &j); // so j holds the number of students
...
name=(char*)calloc(j, sizeof(char));
您刚刚分配了j
字符。我认为那不是你想要的。你到底想要什么?
scanf("%s",&name[i]);
这是什么?您尝试将string读入单个字符吗?同样,您想要什么?如果要阅读所有学生的姓名,则应该开始为每个字符串分配字符串数组和内存,例如:
char **name= malloc(j*sizeof(char *));
for (int i= 0; i<j; i++) {
name[i]= malloc(80); // allocate 80 charrs for each name
printf("Enter name for student %d:\n", i+1);
scanf("%80s", name[i]);
}
您应该使菜单循环:
do {
printmenu();
menu= 0;
if (scanf("%d", &menu)==1) {
switch (menu) {
case 1: ....; break;
case....
default:...
}
}
} while (menu !=0);
注意,if (opt1 = 1)
将分配 1到opt1
。我认为您的意思是if (opt1==1)
到目前为止;剩下的就是给你的。
((注:为了学习,我没有提供高级解决方案;只是基础知识。)