虽然循环只发生一次

时间:2016-02-25 15:31:32

标签: c while-loop do-while

我的Header set Cache-Control "no-cache, no-store, must-revalidate" Header set Pragma "no-cache" Header set Expires "0" 循环只发生一次,而我需要多次检查以确保小时输入为24小时。我做错了什么?我知道可能有些东西,但是我一直在玩它,我仍然只有一次while循环。

while

3 个答案:

答案 0 :(得分:7)

如果您想在用户提供无效输入时继续询问输入,则需要检查:

while (h < 0 || h >= 24);

就像现在一样,您只需执行一次while,因为输入有效并符合h > 0 && h < 24的模式。

答案 1 :(得分:1)

我猜你的while循环只运行一次因为条件变错了。

我猜你想要这样的东西:

#include <stdio.h>
#include <time.h>

int main(int argc, char *argv[])
{
    int h=0;
    int m=0;
    int d=0;
    int ht=0;
    int t=0;


    do
    {
        if (h != 0) printf ("Invalid input. Please use 24hr format\n"); /* get this inside the loop */
        printf("Starting Hour: "); /* get this inside the loop */
        if (scanf("%d", &h) != 1) return 1; /* add checking if the reading is successful */
    }
    while (h < 0 || 24 <= h); /* loop while the input is invalid */

    /* remove extra scanf and printf */

    printf("Starting Minute: ");
    if (scanf("%d",&m) != 1) return 1; /* add checking if the reading is successful */
    printf("Starting Time is %d:%d, what is the duration? ", h, m);
    if (scanf("%d",&d) != 1) return 1; /* add checking if the reading is successful */
    t=(m+d);
    ht=t/60;
    h=(h+ht)%24;
    m=t%60;

    printf("Ending Time: %d:%d",h,m);
    printf("\n");

    /* no extra reading */
    return 0;
}

答案 2 :(得分:0)

如果您想以24小时格式输入一小时,则必须接受小时部分0-23之间的数字,因为它可以从00:00到23:59。

所以你的循环表达式应该是:while (h < 0 || h > 23);