您好我正在尝试自己学习C语言编程,并设法制作了一个非常简单的程序,根据用户输入计算圆的表面。 但是程序只运行一次然后关闭它。 这最初的意图是因为它仅用于学习,但我想扩展这个计划以提高我的技能/知识,并希望有人能指出我正确的方向。
我现在要做的不是在运行一次后终止程序;我想为用户提供一个选择来停止程序或继续它并计算一个新的圆圈。
我知道必须使用带有getchar函数的if else语句来完成它,但是我有一些问题围绕它如何将它放在程序流中。我希望有人可以就如何解决这个问题给我一些指示,或者可以指出一些能够正确解释这个问题的文档。
目前我有这个:
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;
}
并且我试图完成这样的事情(下面),但是我不能让它正常工作(我得到警告,在尝试编译时没有定义标签“diameter”。)
#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不是最佳使用方法,但在这种情况下,它似乎是解决此问题的最简单方法。 (而且程序并不复杂)。但是,如果我错了,请让我也知道。
答案 0 :(得分:0)
选项1 :(可能是最佳选择):使用do..while
循环。在主代码块上方放置do {
,并在末尾添加} while (<repeat condition>);
。程序将运行一次代码,检查重复条件(将是&#34;用户输入是&#34;),如果是,则重复,否则不重复。
选项2:递归调用main()
。你说你已经尝试了#34;但是我不确定你是否尝试过尝试使用goto。只需使用行main()
再次调用该函数即可。请注意,如果执行此操作的次数过多,则可能会导致堆栈溢出,因为计算机会跟踪每个调用。让它成为一个问题需要很多,但如果有足够的重复,它就会发生。
答案 1 :(得分:0)
您可以执行以下操作:
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
}
}
如果您遵循此模式,您可以在以后为您的程序添加更多选项。您只需在case
语句中添加switch
,并在菜单中加入该操作即可。您可以搜索menu driven c program
以获取更多详细信息。请尝试阅读while loop
和switch... case statements
。
答案 2 :(得分:0)
我实际上设法以两种方式开展工作。 感谢您的提示和建议。