如何在没有Goto语句的情况下返回程序的开头

时间:2015-11-01 06:55:38

标签: c function loops break

#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,同样适用于显示错误消息等的情况。提前致谢。

3 个答案:

答案 0 :(得分:5)

通过引入无限循环可以很容易地实现。

#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;
}

答案 1 :(得分:1)

有少数情况下使用goto是&#34;好的,&#34;但这肯定不是一个。

首先,将程序的相关位置放入函数中。

然后,监视并使用用户输入,如下所示:

int number = -1;

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

    call_foo_function(number);
}

答案 2 :(得分:0)

是的,正如@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
}