4

我继续学习C编程,今天遇到了一个问题。在我的程序中,用户必须输入一个以分钟为单位的时间值,我的程序将计算它的秒数(实际上非​​常简单)。但我想定一个规则,那个时间不能是负数。所以我使用了这段代码:

    if(a<=0)
    {
        printf("Time cannot be equal to, or smaller than zero, so the program will now terminate\n");
        exit(EXIT_FAILURE);
    }

但是现在,我不想终止我的程序,我希望它返回到用户必须输入值时的状态。

我在终止我的程序时遇到了问题,但是一些搜索帮助了我,但是我没有得到任何搜索如何重新启动我的程序的结果。

这是我的程序的文本(我在 Linux 上工作):

#include<stdio.h>
#include<stdlib.h>
main()
{
    float a;
    printf("\E[36m");
    printf("This program will convert minutes to seconds");
    getchar();
    printf("Now enter your time in minutes(e.g. 5):");
    scanf("%f", &a);
    printf("As soon as you will press the Enter button you`ll get your time in seconds\n");
    getchar();
    getchar();


    if(a<=0)
    {
        printf("Time cannot be equal to, or smaller than zero, so the program will now terminate\n");
        printf("\E[0m");
        exit(EXIT_FAILURE);
    }
    else
    {
        float b;
        b=a*60;
        printf("\E[36m");
        printf("The result is %f seconds\n", b);
        printf("Press Enter to finish\n");
        getchar();
    }
    printf("\E[0m");
}

PS我不知道如何正确命名这个函数,所以我称之为restart,也许它有不同的名字?

4

3 回答 3

5

已发布的两种解决方案都有效,但我个人更喜欢这种方法:

// ...
printf("Now enter your time in minutes(e.g. 5):");
scanf("%f", &a);

while(a <= 0){
   printf("Time cannot be equal to, or smaller than zero, please enter again: ");
   scanf("%f", &a);
}

我认为它更清楚,它提供了一个错误消息和一个相互独立的常规消息的机会。

于 2012-07-30T16:40:24.783 回答
0

您可以简单地使用do ... while循环(包括您的程序源代码)。

do {
    /* Get user input. */
} while (a <= 0);

或者该goto语句也用于模拟循环(不鼓励初学者)。

 start:
    /* Get user input. */
    if (a <= 0)
        goto start;
于 2012-07-30T16:16:24.097 回答
0

你可以试试 if-else 在哪里:

do
{
/* get user input*/
if (a > 0)
    {
     /* ... */
    }
else
   printf ("Time cannot be negative, please re-enter") 
}while(<condition>);

*条件可能是直到您想继续。

于 2012-07-30T16:25:57.477 回答