簡體   English   中英

根據C中的用戶輸入重新執行程序

[英]Re-execute program based on user input in C

嗨,我正在嘗試自己學習C語言的編程,並設法制作了一個非常簡單的程序,可以根據用戶輸入來計算圓的表面。 但是,該程序僅運行一次,然后將其關閉。 最初的目的是因為它僅用於學習,但我想擴展該計划以提高我的技能/知識,並希望有人可以指出正確的方向。

我現在想做的不是在運行一次之后終止程序。 我想為用戶提供一個選擇,使其停止程序或繼續執行程序並計算一個新的圓。

我知道必須使用帶有getchar函數的if if語句來完成,但是我在將其放入程序流中時遇到了一些問題。 我希望有人可以給我一些有關如何解決此問題的指導,或者可以指出一些正確解釋此問題的文檔。

目前我有這個:

int main(void){

    float diameter;
    double straal;
    double oppervlakte;
    char ch;

        printf("Type de diameter van de cirkel:\t");
        scanf("%g", &diameter);
        printf("\n");

        straal = diameter / 2;
        oppervlakte = PI * (straal * straal);

        printf("De straal =\t%g \n\n", straal  );
        printf("De oppervlakte =\t%f \n\n" , oppervlakte);

        printf("Druk enter om af te sluiten.");

        scanf("%c",&ch);
        getchar();

 return 0;
}

和即時通訊試圖完成這樣的事情(如下),但我無法使其正常工作(我收到警告,嘗試編譯時未定義標簽“直徑”。)

#include <stdio.h>
#define PI 3.14

int main(void){

    float diameter;
    double straal;
    double oppervlakte;
    char ch;

        printf("Type de diameter van de cirkel:\t");
        scanf("%g", &diameter);
        printf("\n");

        straal = diameter / 2;
        oppervlakte = PI * (straal * straal);

        printf("De straal =\t%g \n\n", straal  );
        printf("De oppervlakte =\t%f \n\n" , oppervlakte);

        printf("Druk 'd' om door te gaan of druk enter om af te sluiten.");

        if(getchar() == 'd')
            {
            goto diameter; /* tried to use main(void) here but that also doesnt work */
            }
        else{
            scanf("%c",&ch);
            getchar();
            }

 return 0;
}

我確實知道goto並不是要使用的最佳實踐,但是在這種情況下,這似乎是解決此問題的最簡單方法。 (並且程序並不復雜)。 但是,如果我在此方面做錯了,也請告訴我。

選項1 :(可能是最佳選擇):使用do..while循環。 do {放置在您的主代碼塊上方,然后添加} while (<repeat condition>); 在末尾。 該程序將運行一次代碼,檢查重復條件(“用戶輸入是”),如果重復,則重復一次,否則重復一次。

選項2:遞歸調用main() 您說過“嘗試過”,但是我不確定是否通過嘗試使用goto來嘗試過。 只需使用main()行再次調用該函數即可。 請注意,如果這樣做次數過多,則可能會導致堆棧溢出,因為計算機會跟蹤每個調用。 這是一個問題,需要很多時間,但是如果重復很多,它可能會發生。

您可以執行以下操作:

while(true) //this is an endless loop
{
  //display a menu like
  1. calc area
  2. [anything else if you want to add in future]
  .
  .
  .
  0. exit

  //take user input (e.g 1 for calculating the area)

  switch(user input)
  {
     case 1:
       //code to calculate area
     break;

     case 2:
       //code for anything else
     break

     case 0:
       exit(0);  //this will terminate the program
   }
}

如果遵循這種模式,將來可以在程序中添加更多選項。 您只需要在switch語句中添加一個case ,然后將該操作包括在菜單中即可。 您可以搜索menu driven c program以獲取更多詳細信息。 嘗試閱讀有關while loopswitch... case statements

實際上,我設法通過兩種方式進行工作。 感謝您的提示和建議。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM