2016-02-25 16 views
-2

Мой цикл while происходит только один раз, когда мне нужно проверять несколько раз, чтобы убедиться, что входной час составляет 24 часа. Что я делаю неправильно? Я знаю, наверное, что-то, но я играл с ним, и я все еще получаю цикл 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; 

    printf("Starting Hour: "); 

    do 
    { 
     scanf("%d", &h); 
    } 
    while (h > 0 && h < 24); 

    printf ("Invalid input. Please use 24hr format\n"); 
    printf ("Starting Hour: "); 
    scanf("%d",&h); 

    printf("Starting Minute: "); 
    scanf("%d",&m); 
    printf("Starting Time is %d:%d, what is the duration? ", h, m); 
    scanf("%d",&d); 
    t=(m+d); 
    ht=t/60; 
    h=(h+ht)%24; 
    m=t%60; 

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

    getchar(); 
    return 0; 
} 
+0

Почему вы отвергаете '0'? – MikeCAT

+0

, потому что я мой час в 24-часовом формате –

+0

на самом деле неважно, что вы правы. –

ответ

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; 
} 
+0

Люди в SO уверены, что люблю копировать-вставить – Idos

+0

Что значит? –

+0

Что мой ответ был идентичен, и вы сказали это не работает – Idos

7

Если вы хотите сохранить задаёте, когда пользователь дает недопустимый вход вам нужно проверить:

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

Как это прямо сейчас, вы получаете while выполнить только один раз потому что вход действителен и подходит для модели h > 0 && h < 24.

+0

Это не работает :( –

+0

Я проверил его на своей машине ... – Idos

+0

, как только я вхожу, как 26, ничего не происходит, все пробелы –

0

Как вы хотите час, введенный в 24-часовом формате, вы должны принять числа от 0-23 для часов части, так как она может занимать от 00: 00 до 23:59.

Таким образом, ваше выражение цикла должно быть достаточно: while (h < 0 || h > 23);

Смежные вопросы