2015-11-02 151 views
2

這是第一次海報。我現在正在學校參加C語言編程課程,過去只採用了編程基礎知識。我一直在努力,但不知何故設法達到了第5周的一切。如何讓這個簡單的C程序重新開始?

基本上,這是我迄今爲止。我試圖做的是讓這個程序在你已經跑完一次之後回到菜單選擇屏幕。我相信我需要把所有東西都放在一個while循環中,但是我試圖添加它,但是所有發生的事情是,我最終得到了程序,要求我輸入我已經選擇的選項的小時數。如果有幫助的話,我正在使用Microsoft Visual Studio Express 2015。

感謝您的任何幫助/解釋。

#include <stdio.h> 
#include <iostream> 

#define BASEPAY1 8.75 
#define BASEPAY2 9.33 
#define BASEPAY3 10 
#define BASEPAY4 11.20 
#define BASEHRS 40 
#define OVERTIME 1.5 
#define AMT1 300 
#define AMT2 150 
#define RATE1 0.15 
#define RATE2 0.20 
#define RATE3 0.25 

int main(void) 
{ 
    int hours; 
    float gross; 
    float net; 
    float taxes; 
    int choice; 

    printf("\n\nMenu\n----------\n\n"); 
    printf("1) $8.75/hr\n"); 
    printf("2) $9.33/hr\n"); 
    printf("3) $10.00/hr\n"); 
    printf("4) $11.20/hr\n"); 
    printf("5) quit\n\n"); 

    printf("Enter the number that corresponds to your rate or press 5 to quit.\n"); 
    scanf_s("%d", &choice); 

    switch (choice) { 
     case 1: 
      printf("Enter the number of hours worked this week: \n"); 
      scanf_s("%d", &hours); 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY1; 
      else 
       gross = BASEHRS * BASEPAY1 + (hours - BASEHRS) * BASEPAY1 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
        taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
        else 
        taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 

      break; 
     case 2: 
      printf("Enter the number of hours worked this week: "); 
      scanf_s("%d", &hours); 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY2; 
      else 
       gross = BASEHRS * BASEPAY2 + (hours - BASEHRS) * BASEPAY2 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
        taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
       else 
        taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 

      break; 
    case 3: 
      printf("Enter the number of hours worked this week: "); 
      scanf_s("%d", &hours); 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY3; 
      else 
       gross = BASEHRS * BASEPAY3 + (hours - BASEHRS) * BASEPAY3 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
        taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
       else 
        taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 

      break; 
    case 4: 
      printf("Enter the number of hours worked this week: "); 
      scanf_s("%d", &hours); 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY4; 
      else 
       gross = BASEHRS * BASEPAY4 + (hours - BASEHRS) * BASEPAY4 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
        taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
       else 
        taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 

      break; 
    case 5: 
      return 0; 
    default: 
      printf("Invalid choice, please enter the number that corresponds "); 
      printf("to your rate or press 5 to quit.\n\n"); 
    } 


    system("PAUSE"); 

    return 0; 
} 
+1

請用'while'循環嘗試顯示代碼。 – kaylum

回答

2

您需要在每個步驟中更新choice的值。所以,我的代碼是這樣的:

int main(void) 
{ 
    // some code 
    int choice; 
    bool loop = true; 

    while(loop) 
    { 
     printf("\n\nMenu\n----------\n\n"); 
     // print the menu 

     printf("Enter the number that corresponds to your rate or press 5 to quit.\n"); 
     scanf_s("%d", &choice); 

     switch (choice) { 
     // cases 1-4 
     case 5: 
      loop = false; 
      break; 

     default: 
      printf("Invalid choice.\n\n"); 
     } // exit from switch 
    } // exit from while-loop 

    return 0; 
} 
0

與您的代碼的問題是,while循環是提示工資率了。所以它只執行一次提示。

只要招行

while (choice < 5) { 

到線

printf("\n\nMenu\n----------\n\n"); 

現在它將會環路所需要的整個程序之前。

+0

如果用戶輸入'0'會怎麼樣? – ameyCU

+0

然後它會打印'無效的選擇,請輸入與您的速度相對應的數字,或按5退出。' – waterjuice

+0

在使用while循環之前,一定要將選項設置爲小於5的值。在使用它們之前定義變量是個好習慣。 – AlexPogue

0
#include <stdlib.h> 
#include <stdio.h> 
#include <conio.h> 



#define BASEPAY1 8.75 
#define BASEPAY2 9.33 
#define BASEPAY3 10 
#define BASEPAY4 11.20 
#define BASEHRS 40 
#define OVERTIME 1.5 
#define AMT1 300 
#define AMT2 150 
#define RATE1 0.15 
#define RATE2 0.20 
#define RATE3 0.25 

char *szMainMenu= 
    "\n\nMENU:\n" 
    "----------\n" 
    "\n" 
    " 1) $8.75/hr\n" 
    " 2) $9.33/hr\n" 
    " 3) $10.00/hr\n" 
    " 4) $11.20/hr\n" 
    " 5) quit\n" 
    "\n" 
    "Enter the number that corresponds to your rate or press 5 to quit.\nchoice: "; 

/**____________________________________________________________________________ 
*/ 
int intPrompt(const char *prompt) { 
    int n; 
    printf("%s",prompt); 
    scanf(" %d",&n); 
    return n; 
} 
/**____________________________________________________________________________ 
*/ 
int main(void) { 

    int hours; 
    float gross; 
    float net; 
    float taxes; 
    int choice; 

    while((choice=intPrompt(szMainMenu))!=5) { 

     if(choice>=1 && choice<=4) 
      hours=intPrompt("Enter the number of hours worked this week: "); 

     switch (choice) { 
     case 1: 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY1; 
      else 
       gross = BASEHRS * BASEPAY1 + (hours - BASEHRS) * BASEPAY1 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
       taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
      else 
       taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 
      break; 
     case 2: 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY2; 
      else 
       gross = BASEHRS * BASEPAY2 + (hours - BASEHRS) * BASEPAY2 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
       taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
      else 
       taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 
      break; 
     case 3: 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY3; 
      else 
       gross = BASEHRS * BASEPAY3 + (hours - BASEHRS) * BASEPAY3 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
       taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
      else 
       taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 
      break; 
     case 4: 

      if (hours <= BASEHRS) 
       gross = hours * BASEPAY4; 
      else 
       gross = BASEHRS * BASEPAY4 + (hours - BASEHRS) * BASEPAY4 * OVERTIME; 
      if (gross <= AMT1) 
       taxes = gross * RATE1; 
      else if (gross <= AMT1 + AMT2) 
       taxes = AMT1 * RATE1 + (gross - AMT1) * RATE2; 
      else 
       taxes = AMT1 * RATE1 + AMT2 * RATE2 + (gross - AMT1 - AMT2) * RATE3; 
      net = gross - taxes; 

      printf("gross: $%.2f \n", gross); 
      printf("taxes: $%.2f \n", taxes); 
      printf("net: $%.2f \n", net); 
      break; 

     default: 
      _clrscr(); 
      printf(
       "Invalid choice, please enter the number that corresponds\n" 
       "to your rate or press 5 to quit.\n\n" 
       "press a key to continue"); 
      _getch(); 
     } 

     _clrscr(); 
    } 

    system("PAUSE"); 

    return 0; 
}