[英]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.