2016-05-22 11 views
-3

Ich denke, dass ich über alles, was ich kann, aber wenn ich Optionen drücken pass 3, es erscheint immer als Option 3. Fall 1,2,3 Arbeit wie vorgesehen, aber 4,5,6,7,8, 9,10 wird nur automatisch als Fall 3 hochgehen. Was also fehlt deiner Meinung nach?Switch-Programm hält an einem bestimmten Punkt Schleifen. Cant herauszufinden,

#include "stdafx.h" 
#include <stdlib.h> 
#include <iostream> 
#include <sstream> 
#include <stdio.h> 
using namespace std; 


int pgk, ch1, ch2; // variables for the Menu1 and Menu2 
char ch3; // Variable for menu 3 


int main() 
{ 
     printf("1, Final Lab\n"); // first option 
     printf("2, Exit\n");// second option 
     cin >> ch1; // computer is going to scan the option from keyboard 
     // Switch change the option depending of the number we put in the keyboard 
     switch (ch1) 
     { 
     case 1: 
     { 
      goto Menu2; // if the user enters 1, it is going to send to send it to do the operations 
     } 
     case 2: 
     { 
      goto End; // if the user enters 2, it is going to end the program. 
     } 

    Menu2: 
     printf(" --------------------------Menu-------------------\n"); 
     printf("1:Pounds to kilograms\n"); 
     printf("2:inches to centimeters\n"); 
     printf("3:cups to milliters\n"); 
     printf("4:seconds to minutes \n"); 
     printf("5:Knots to mph\n"); 
     printf("6:tip calculator\n"); 
     printf("7:Grade average\n"); 
     printf("8:target heart rate calculator\n"); 
     printf("9:discount calculator\n"); 
     printf("10:end\n"); 
     cin >> ch2; // enter the option the user wants 
     switch (ch2) // Options 
     { 
     case 1: 
     { 
      system("cls"); 
      int pkg; 
      printf("Choose to convert pounds to kg or kg to pounds. Press 0 for 1st option and press any other number for 2nd option.\n"); 
      scanf_s("%f", &pkg); 
      _asm 
      { 
       MOV EBX, pkg; 
       CMP pkg, 0; 
       JE pounds_kilos; 
       JMP kilos_pounds; 
      } 

     pounds_kilos: 
      float nguypounds, nguyconvert1, nguyanswer1; 
      nguyconvert1 = 2.204622f; 
      printf("Enter the amount of pounds you would like to convert to kilograms\n"); 
      scanf_s("%f", &nguypounds); 

      _asm 
      { 

       FLD nguypounds; 
       FDIV nguyconvert1; 
       FST nguyanswer1; 
      } 
      printf("Your enter number of pounds to kilograms is %f\n", nguyanswer1); 
      system("pause"); 
      goto Menu3; 

     kilos_pounds: 
      float nguykilos, nguyconvert2, nguyanswer2; 
      nguyconvert2 = 2.204622f; 
      printf("Enter the amount of kilograms you would like to convert to pounds\n"); 
      scanf_s("%f", &nguykilos); 

      _asm 
      { 
       FLD nguykilos; 
       FMUL nguyconvert2; 
       FST nguyanswer2; 
      } 
      printf("Your enter number of kilograms to pounds is %f\n", nguyanswer2); 
      goto Menu3; 

     } 

     case 2: // if the user enters 2 
     { 

      system("cls"); 
      int pkg; 
      printf("Choose to convert inches to centimeters or centimeters to inches. Press 0 for 1st option and press any other number for 2nd option.\n"); 
      scanf_s("%f", &pkg); 
      _asm 
      { 
       MOV EBX, pkg; 
       CMP pkg, 0; 
       JE inches_centimeters; 
       JMP centimeters_inches; 
      } 

     inches_centimeters: 
      float nguyinches, nguyconvert3, nguyanswer3; 
      nguyconvert3 = 2.54f; 
      printf("Enter the amount of inches you would like to convert to centimeters\n"); 
      scanf_s("%f", &nguyinches); 

      _asm 
      { 

       FLD nguyinches; 
       FMUL nguyconvert3; 
       FST nguyanswer3; 
      } 
      printf("Your enter number of inches to centimeters is %f\n", nguyanswer3); 
      goto Menu3; 
     } 
     centimeters_inches: 
      float nguycentimeters, nguyconvert4, nguyanswer4; 
      nguyconvert4 = 0.39370079f; 
      printf("Enter the amount of centimeters you like to convert to inches\n"); 
      scanf_s("%f", &nguycentimeters); 

      _asm 
      { 
       FLD nguycentimeters; 
       FMUL nguyconvert4; 
       FST nguyanswer4; 
      } 
      printf("Your enter number of centimeters to inches is %f\n", nguyanswer4); 

      goto Menu3; 

     } 
     case 3: // if the user enter 3 
     { 
      system("cls"); 
      int pkg; 
      printf("Choose to convert cups to milliters or milliters to cups. Press 0 for 1st option and press any other number for 2nd option.\n"); 
      scanf_s("%f", &pkg); 
      _asm 
      { 
       MOV EBX, pkg; 
       CMP pkg, 0; 
       JE cups_milliters; 
       JMP milliters_cups; 
      } 

     cups_milliters: 
      float nguycups, nguyconvert5, nguyanswer5; 
      nguyconvert5 = 236.58823f; 
      printf("Enter the amount of cups you would like to convert to milliters\n"); 
      scanf_s("%f", &nguycups); 

      _asm 
      { 

       FLD nguycups; 
       FMUL nguyconvert5; 
       FST nguyanswer5; 
      } 
      printf("Your enter number of cups to milliters is %f\n", nguyanswer5); 
      system("pause"); 

      goto Menu3; 

     milliters_cups: 
      float nguymilliters, nguyconvert6, nguyanswer6; 
      nguyconvert6 = 236.58823f; 
      printf("Enter the amount of milliters you like to convert to cups\n"); 
      scanf_s("%f", &nguymilliters); 

      _asm 
      { 
       FLD nguymilliters; 
       FDIV nguyconvert6; 
       FST nguyanswer6; 
      } 
      printf("Your enter number of milliters to cups is %f\n", nguyanswer6); 
      goto Menu3; 

     } 
     case 4: // if the user enters 4 
     { 
      system("cls"); 
      int pkg; 
      printf("Choose to convert seconds to minutes or minutes to seconds. Press 0 for 1st option and press any other number for 2nd option.\n"); 
      scanf_s("%f", &pkg); 
      _asm 
      { 
       MOV EBX, pkg; 
       CMP pkg, 0; 
       JE sec_min; 
       JMP min_sec; 
      } 
     sec_min: 
      float nguyseconds, nguyconvert7, nguyanswer7; 
      nguyconvert7 = 60; 
      printf("Enter the amount of seconds you would like to convert to minutes\n"); 
      scanf_s("%f", &nguyseconds); 

      _asm 
      { 

       FLD nguyseconds; 
       FDIV nguyconvert7; 
       FST nguyanswer7; 
      } 
      printf("Your enter number of seconds to minutes is %f\n", nguyanswer7); 
      goto Menu3; 

     min_sec: 
      float nguyminutes, nguyconvert8, nguyanswer8; 
      nguyconvert8 = 60; 
      printf("Enter the amount of minutes you like to convert to seconds\n"); 
      scanf_s("%f", &nguyminutes); 

      _asm 
      { 
       FLD nguyminutes; 
       FMUL nguyconvert8; 
       FST nguyanswer8; 
      } 
      printf("Your enter number of minutes to seconds is %f\n", nguyanswer8); 
      system("pause"); 
      goto Menu3; 
     } 
     case 5: 
     { 
      system("cls"); 
      int pkg; 
      printf("Choose to knots to mph or mph to knots. P=ress 0 for 1st option and press any other number for 2nd option.\n"); 
      scanf_s("%f", &pkg); 
      _asm 
      { 
       MOV EBX, pkg; 
       CMP pkg, 0; 
       JE knots_mph; 
       JMP mph_knots; 
      } 
     knots_mph: 
      float nguyknots, nguyconvert9, nguyanswer9; 
      nguyconvert9 = 1.15f; 
      printf("Enter the amount of knots you would like to convert to mph\n"); 
      scanf_s("%f", &nguyknots); 

      _asm 
      { 

       FLD nguyknots; 
       FMUL nguyconvert9; 
       FST nguyanswer9; 
      } 
      printf("Your enter number of knots to mph is %f\n", nguyanswer9); 
      goto Menu3; 

     mph_knots: 
      float nguymph, nguyconvert10, nguyanswer10; 
      nguyconvert10 = 1.15f; 
      printf("Enter the amount of mph you like to convert to knots\n"); 
      scanf_s("%f", &nguymph); 

      _asm 
      { 
       FLD nguymph; 
       FDIV nguyconvert10; 
       FST nguyanswer10; 
      } 
      printf("Your enter number of minutes to seconds is %f\n", nguyanswer10); 
      system("pause"); 
      goto Menu3; 

     } 
     case 6: 
     { 
      system("cls"); 
      float nguybill, nguytip, nguyamount; 
      printf("Please enter the total amount of your bill\n"); 
      scanf_s("%f", &nguybill); 
      printf("Now add the percentage you would like to tip. PLEASE ENTER IN PERCENTAGE IN DECIMAL FORM!\n"); 
      scanf_s("%f", &nguytip); 

      _asm 
      { 
       fld nguybill 
        fld nguytip 
        fmul nguybill 
        fadd st(0), st(1) 
        fst nguyamount 
      } 
      printf("the the toal amount after tip is %f\n", nguyamount); 
      goto Menu3; 

     } 
     case 7: 
     { 
      system("cls"); 
      float nguytest1, nguytest2, nguytest3, nguyave, nguytotave; 
      nguyave = 3; 
      printf("Please enter the grade of your first test.\n"); 
      scanf_s("%f", &nguytest1); 
      printf("Please enter the grade of your second test.\n"); 
      scanf_s("%f", &nguytest2); 
      printf("Please enter the grade of your thrid test.\n"); 
      scanf_s("%f", &nguytest3); 
      _asm 
      { 
       fld nguytest1 
        fld nguytest2 
        fld nguytest3 
        fadd st(0), st(1) 
        fadd st(0), st(2) 
        fdiv nguyave 
        fst nguytotave 
      } 
      printf("Your average grade is %f", nguytotave); 
      goto Menu3; 
     } 
     case 8: 
     { 
      system("cls"); 
      float nguyage, nguyageconst, nguymaxhr, nguytarghr, nguymulmax; 
      nguyageconst = 220; 
      nguymulmax = .70f; 
      printf("Please enter the total amount of your age to find your max heart rate and target heart rate\n"); 
      scanf_s("%f", &nguyage); 

      _asm 
      { 
       fld nguyage 
        fld nguyageconst 
        fsub nguyage 
        fst nguymaxhr 
      } 

      _asm 
      { 
       fld nguymaxhr 
        fmul nguymulmax 
        fst nguytarghr 
      } 
      printf("your max heart rate should be %f beat per minute\n", nguymaxhr); 
      printf("and your target heart rate should be %f beats per minute\n", nguytarghr); 
      goto Menu3; 

     } 
     case 9: 
     { 
      system("cls"); 
      float nguyogprice, nguydis, nguyoff, nguynamount; 
      printf("Please enter the oringal price\n"); 
      scanf_s("%f", &nguyogprice); 
      printf("Now enter the given discout. PLEASE ENTER IN PERCENTAGE IN DECIMAL FORM!\n"); 
      scanf_s("%f", &nguydis); 

      _asm 
      { 
       fld nguyogprice 
        fld nguydis 
        fmul nguyogprice 
        fst nguyoff 
      } 

      _asm 
      { 
       fld nguyoff 
        fld nguyogprice 
        fsub st(0), st(1) 
        fst nguynamount 
      } 
      printf("The new sale price is %f\n", nguynamount); 
      goto Menu3; 

     } 
     case 10: // if the user enters 5 
     { 
      goto End; //go to end 
     } 
     } 

    Menu3: // This menu is going to ask if the user wants to continue the program 
     printf(" -------------------------Question---------------------\n"); // display message 
     printf("Do you want to continue the program Y/N\n"); // display message 
     cin >> ch3; // enter yes or no 
     switch (ch3) // conditional 
     { 
     case 'y': // if the user enters 'y' 
     { 
      goto Menu2; // go to menu 2 and continue the program 
     } 
     case 'Y': // if the user enters 'Y' 
     { 
      goto Menu2; // go to menu 2 and continue the program 
     } 
     case 'n': // if the user enters 'n' 
     { 
      goto End; // finish the program 
     } 
     case 'N': // if the user enters 'N' 
     { 
      goto End; // finish the program 
     } 


     } 

    End: // menu to end the program 
     system("pause"); // pause the system 
     return 0;// end program 

    } 
+2

Warum gibt es alle Assemblerblöcke anstelle von normalen mathematischen Operationen? – CherryDT

Antwort

6

Die schließende geschweifte Klammer kurz vor case 3 dort fälschlicherweise platziert wird, schließt er die switch-Anweisung. Somit enden die Eingänge 3 bis 9 alle in Fall 3.

Nichts für ungut geplant, aber die Verwendung von außerhalb sehr spezifischen Kontexten ist seit langem als extrem schlechte Programmierpraxis aus Gründen der schlechten Wartbarkeit und Effizienz gebrandmarkt (Optimierung der Möglichkeiten für die Compiler). Es wird sich auszahlen, Zeit und Mühe zu investieren, um den Code zu entwirren und das Programm neu zu strukturieren.

Verwandte Themen