【问题标题】:C-Help in SwitchC-Help in Switch
【发布时间】:2018-10-28 14:46:36
【问题描述】:

如果我希望它返回上一个菜单,我应该在一个案例中添加什么语句? 例如:

int main()
{
int nNum;
int nNum2;
int nNum3, nInTime, nOutTime, nTimeDiff, nNum4, nNum5 nOvertimeHours;
float fBaseSalary;
printf("1-Regular Weekly Salary Computation \n2-Cutomized Salary Computation \n3 -Exit \n\nEnter number: ");
scanf("%d",&nNum);

switch(nNum)
{
    case 1:
        printf("\nYou have selected Regular Salary Computation!\nDetails:\nDaily Rate:500\nDay Type:Normal\nIn Time:900\nOut Time:900\nNumber of Work Days:5\nWeekly Salary:2500");
        break;
    case 2:
        printf("\nYou have selected Cutomized Salary Computation!\n\nPlease enter number to choose corresponding details:");
        printf("\n\nType of Day:\n1-Overtime \n2-Regular Work hours\n\nPlease select number: ");
        scanf("%d", &nNum2);
        printf("IN time:");
        scanf("%d", &nInTime);
        printf("OUT time:");
        scanf("%d", &nOutTime);
        printf("Base Salary:");
        scanf("%f", &fBaseSalary);
        nTimeDiff = nOutTime - nInTime;
        switch(nNum2)
        {
            case 1:
                if(nTimeDiff > 800)
                {   printf("\n1-Non-night shift overtime\n2-Night shift overtime\nPlease select number:");
                    scanf("%d",&nNum3);
                    switch(nNum3)
                        {
                            case 1:
                                printf("1-Normal Day\n2-Rest Day\n3-Special Non-Working Day\n4-Special Non-Working Day and Rest Day\n5-Regular Holiday\n6-Regular Holiday and Rest Day\nSelect Number:");
                                scanf("%d", &nNum4);
                                switch(nNum4)
                                {
                                    case 1:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Normal Day with Overtime\n");
                                        printf("Salary of the Day                   |%f", getNormalDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime));
                                        break;
                                    case 2:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Rest Day with Overtime\n");
                                        printf("Salary of the Day                   |%f", getRestDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime));
                                        break;
                                    case 3:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Special Non-Working Holiday with Overtime\n");
                                        printf("Salary of the Day                   |%f", getSpecialNonWorkingDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime));
                                        break;
                                    case 4:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Special Non-Working and Rest Day with Overtime\n");
                                        printf("Salary of the Day                   |%f", getSpecialNonWorkingAndRestDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime));
                                        break;
                                    case 5:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Regular Holiday with Overtime\n");
                                        printf("Salary of the Day                   |%f", getRegularHoliDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime));
                                        break;
                                    case 6:
                                        printf("Base Salary                         | %f\n", fBaseSalary);
                                        nOvertimeHours = (nTimeDiff - 800 ) / 100;
                                        printf("Overtime Hours(Night Shift OT Hours)| %d(0)\n", nOvertimeHours);
                                        printf("IN Time                  | %d\n", nInTime);
                                        printf("OUT Time                 | %d\n", nOutTime);
                                        printf("Day Type                            |Regular Holiday and Rest Day with Overtime\n");
                                        printf("Salary of the Day                   |%f",  getRegularHolidayAndRestDayNonNightShiftOT(fBaseSalary, nOutTime, nInTime)); 
                                        break;
                                }
                        }
                }
                else if(nTimeDiff <= 800)
                    {
                    printf("Work hours did not exceed 8 hours. Overtime computation invalid.");
                    return 0;
                    }       
        }   case 2:
                if(nInTime => 2200 || nIntime <=0600 || nOutTime => 2200 || nOutTime <= 600)
                printf("1-Normal Day\n2-Rest Day\n3-Special Non-Working Day\n4-Special Non-Working Day and Rest Day\n5-Regular Holiday\n6-Regular Holiday and Rest Day\nSelect Number:");
                scanf("%d", &nNum5);
                switch(nNum5)
                    case 1:
   }
return 0;
}

我仍在努力,但我打算在每个 switch 中添加一个额外的 case,这将使用户能够返回到上一个 switch 语句。例如,如果用户一开始按下了错误的按钮并选择了错误的选项,则按 3 会将用户带回到上一个菜单

【问题讨论】:

  • 这不是 switch 的工作原理。
  • 所以没有选项可以回到之前的switch语句?
  • @ChristianMichaelTan 更好地展示你的真实代码。
  • 完成编辑。这是我的实际代码,但仍未完成
  • 你应该使用函数。然后回到上一个 switch 语句,你会使用 return

标签: c


【解决方案1】:

你可以使用 goto 语句。

switch(num1)
switchnum1:
    case 1:
        printf("Haha");
    case 2:
        switch(num2)
             case 1:
                 printf("hoho");
             case 2:
             //go back to the previous switch
             goto switchnum1;

但是,除非在 goto 路径中,否则这将导致无限循环, num1 被修改。如果你想要 num1 == num2,那么所有 案件将有 如果 (num1 == num2) 转到switchnum1; goto 可以根据您要编程的内容来解决它,但是 不建议将 goto 作为良好的编程习惯。

【讨论】:

    【解决方案2】:

    您可以通过多种方式做到这一点。首先,掌握一些基本的 .

    #include <stdio.h>
    
    int Menu()
    {
        int i;
        printf("MENU\n\n");
        printf("1 - ...\n");
        printf("2 - ...\n");
        printf("3 - ...\n");
        printf("4 - ...\n");
        printf("5 - ...\n\n");
        printf("Choose: ");
        scanf("%d",&i);
        printf("\n\n");
        return i;
    }
    int main()
    {
        int end = 0;
        while(end!=1)
        {
            int op;
            system("CLS");
            op = Menu();
            switch(op)
            {
            case 1:
            //  funct1();
                break;
            case 2:
            //  funct2();
                break;
            case 3:
            //  funct3();
                break;
            case 4:
            //  funct4();
                break;
            case 5: // This is the option to quit the program
                end = 1;
                break;
            default:
                printf("ERRO: Opcao invalida.\n\n");
                system("PAUSE");
                break;
            }
        }
        return 0;
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2022-12-02
      • 2022-12-02
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-10-24
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多