c - 重复程序提示

标签 c

当前的问题在于评估另一个间隔 (Y/N)? 提示。假设我运行该程序 4 次;为了结束它,我需要输入 N 4 次。

int main() {
    int trap, test;
    double low, hi;
    char repeat, c;

    //Gather End Points
    do {
        printf("Enter endpoints of interval to be integrated (low hi): ");
        test = scanf("%lf %lf", &low, &hi);

        if (test != 2) {
            printf("Error: Improperly formatted input\n");
            while((c = getchar()) != '\n' && c != EOF);  //Discard extra characters
        } else       
        if (low > hi)
            printf("Error: low must be < hi\n");

    } while ((test != 2 || low > hi));

    //Gather amount of triangles
    do {         
        printf("Enter number of trapezoids to be used: ");
        test = scanf("%d", &trap);

        if (test != 1) {
            printf("Error: Improperly formated input\n");
            while((c = getchar()) != '\n' && c != EOF); //Discard extra characters
        } else
        if (trap < 1)
            printf("Error: numT must be >= 1\n");

    } while ((trap < 1 || test != 1));

    //Output integrate
    printf("Using %d trapezoids, integral between %lf and %lf is %lf",
           trap, low, hi, integrate(low, hi, trap));   

    //Prompt user for another time
    while (1) {
        printf("\nEvaluate another interval (Y/N)? ");
        scanf(" %c", &repeat);

        switch (repeat) {
          case 'Y':
            main();
          case 'y':
            main();
          case 'N':
            return 0;
          case 'n':
            return 0;
          default:
            printf("Error: must enter Y or N");
        }
    }             
    return 0;
}

我希望这样,无论我运行的程序是什么,当我输入一个 N 时,它都会关闭。

最佳答案

有很多方法可以实现您想要的目标,但递归调用 main 并不是一个好主意。

更改程序的一个非常简单的方法是添加一个额外的 while(1) 级别。像这样的东西:

int main(void) 
{
    char repeat;
    while(1){       // Outer while to keep the program running

        printf("running program\n");

        // Put your program here

        printf("program done\n");

        repeat = '?';
        while(repeat != 'y' && repeat != 'Y'){  // Repeat until input is 'Y' or 'y'
            printf("\nEvaluate another interval (Y/N)? ");
            scanf(" %c", &repeat);

            switch (repeat){
                case 'Y':
                case 'y':
                    break;
                case 'N':
                case 'n':
                    return 0;   // Stop if input is 'n' or 'N'
               default:
                   printf("Error: must enter Y or N");
            }    
        }
    }

    return 0;  // This will never be reached
}

另一种方法(更简单的方法,IMO)是将您询问用户的代码放入您从 main 调用的函数中。喜欢:

int continueProg()
{
    char repeat = '?';
    while(1){
        printf("\nEvaluate another interval (Y/N)? ");
        scanf(" %c", &repeat);

        switch (repeat){
            case 'Y':
            case 'y':
                return 1;;
            case 'N':
            case 'n':
                return 0;
            default:
                printf("Error: must enter Y or N");
        }    
    }
}

int main(void) 
{
    do {

        printf("running program\n");

        // Put your program here

        printf("program done\n");

    } while(continueProg());

    return 0;
}

顺便说一句:看看 getchar 而不是使用 scanf

关于c - 重复程序提示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55545811/

相关文章:

c++ - 是否有可能有 'times out' 的源代码(在某个时刻后变得无效)?

C 中 system() 的 CTRL+C 无法识别

c++ - 找到与另一个二进制模式匹配的所有 2 位值,然后将它们相加

c - 简单的C指针混淆

c - 将一个矩形拆分成大小相等的矩形?

c++ - 为什么函数只能在其他函数内部调用?

c - 不同.c文件之间的IPC进程间通信

c - 将目标内存地址作为 uint32_t 传递给 memcpy 会引发警告

c - postfix 计算器遇到段错误问题

c - linux中如何将文件从一个文件夹移动到不同的文件夹