我如何使用开关和大小写在C中创建菜单[关闭]

问题描述 投票:-4回答:1

我正在尝试在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*/
        }
c menu switch-statement case
1个回答
0
投票

错误的几件事清单:

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)

到目前为止;剩下的就是给你的。

((注:为了学习,我没有提供高级解决方案;只是基础知识。)

© www.soinside.com 2019 - 2024. All rights reserved.