根据C中的用户输入重新执行程序

时间:2015-03-12 16:10:21

标签: c

您好我正在尝试自己学习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不是最佳使用方法,但在这种情况下,它似乎是解决此问题的最简单方法。 (而且程序并不复杂)。但是,如果我错了,请让我也知道。

3 个答案:

答案 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 loopswitch... case statements

答案 2 :(得分:0)

我实际上设法以两种方式开展工作。 感谢您的提示和建议。