繁体   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