![](/img/trans.png)
[英]C , Pthreads - How to re-execute function or start_routine specified
[英]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 loop
和switch... case statements
。
實際上,我設法通過兩種方式進行工作。 感謝您的提示和建議。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.