如何在没有 Goto 语句的情况下 return 到我的程序的开头

How do I return to the Beginning of my Program without a Goto Statement

#include <stdio.h>
#include <math.h>

long factcalc(int num1);

int main(void) 
{
    int num1;
    long factorial;
    int d;
    int out;

    printf("Please enter a number that is greater than 0");
    scanf_s("%d", &num1);

    if (num1 < 0) {
        printf("Error, number has to be greater than 0");
    } else if (num1 == 0) {
        printf("\nThe answer is 1");
    } else {
        factorial = factcalc(num1);
        printf("\nThe factorial of your number is\t %ld", factorial);
    }

    return 0;
}

long factcalc(int num1) 
{
    int factorial = 1;
    int c;

    for (c = 1; c <= num1; c++)
    factorial = factorial * c;

    return factorial;
}

我想知道,如何让程序不断询问用户输入,直到用户输入“-1”?因此,即使在计算出一个数字的阶乘之后,它也会继续要求更多数字,直到用户输入 -1 为止,当它显示错误消息等时也是如此。提前致谢。

引入无限循环就可以轻松实现

#include <stdio.h>
#include <math.h>

#ifndef _MSC_VER
#define scanf_s scanf
#endif

long factcalc(int num1);

int main(void)
{
    int num1;
    long factorial;
    int d;
    int out;

    for (;;) {
        printf("Please enter a number that is greater than 0");
        scanf_s("%d", &num1);
        if (num1 == -1) {

            break;
        }

        else if (num1 < 0) {

            printf("Error, number has to be greater than 0");
        }

        else if (num1 == 0) {

            printf("\nThe answer is 1");
        }

        else {

            factorial = factcalc(num1);
            printf("\nThe factorial of your number is\t %ld", factorial);
        }
    }

    return 0;
}

long factcalc(int num1) {

    int factorial = 1;
    int c;

    for (c = 1; c <= num1; c++)
        factorial = factorial * c;

    return factorial;
}

有 select 几个使用 goto 的场景 "okay," 但这肯定不是一个。

首先,将程序的相关部分放入函数中。

然后,像这样监视和使用用户输入:

int number = -1;

while (scanf("%d", &number)) {
    if (-1 == number) {
        break;
    }

    call_foo_function(number);
}

是的,正如@ameyCU 所建议的,使用循环是解决方案。例如,

while (1)
{
    printf("Please enter a number that is greater than 0");
    scanf_s("%d", &num1);

    if (-1 == num1)
    {
        break;
    }

    // Find factorial of input number
    ...
    ...

    // Loop back to get next input from user
}