второй цикл функции проверки не выполняется корректная проверка

#c

#c

Вопрос:

 #include <stdio.h>
#include <stdlib.h>


struct time{int hours, mins, secs;};

int main(int argc, char *argv[])
{


printf("nplease enter the time in 24 hr format, nenter the hours, return,nenter minutes, return, enter seconds, and return.n");
struct time one;
scanf("%dn%dn%d", amp;one.hours, amp;one.mins, amp;one.secs); 
printf("retfal1"); 
int yn; 

yn = validateTime(one, yn); 
while(!yn){ 

            printf("nerror, please enter the time in 24 hr format, nenter the hours, return,nenter minutes, return, enter seconds, and return.n");
         scanf("%dn%dn%d", amp;one.hours, amp;one.mins, amp;one.secs);  
         validateTime(one);

      if (!yn){
            puts("Invalid inputnPlease try again"); 
         printf("nplease enter the time in 24 hr format, nenter the hours, return,nenter minutes, return, enter seconds, and return.n");
         scanf("%dn%dn%d", amp;one.hours, amp;one.mins, amp;one.secs);  
         validateTime(one);
      }
      else{ 
         printf ("Time entered was; %d:%d:%d", one.hours, one.mins, one.secs);


      }
      }

      printf ("the time entered ws; %d:%d:%d", one.hours, one.mins, one.secs);

  getch();
  return 0;  
} 


int validateTime(struct time tme, int yn)
{

if (tme.hours < 0 || tme.hours > 23 || tme.mins > 59 || tme.mins < 0 || tme.secs < 0 || tme.secs > 59)
{
              printf("retfal4");
     yn = 0;
     return yn;
     }
else {
     printf("rettru");
     yn = 1;
     return yn; 

     }
}
  

предполагается, что эта программа принимает, проверяет и печатает часы, минуты и секунды (записывая их в отдельных строках), если с первой попытки вводится неверный ввод, она снова запрашивает ввод и проверяет время. проверка вызывает проблемы, она будет корректно проверена при первом вводе, однако, если вы введете неправильное время, это выдаст неверный вывод и предложит следующий ввод, однако даже правильный / допустимый ввод вызовет другой запрос на недопустимый ввод… Я слишком долго смотрел на это, я могу сказать, что на каком-то этапе я сделал что-то глупое, но не могу найти это. Любая помощь была бы очень признательна.

Ответ №1:

Вы назначаете yn только один раз, перед циклом. Внутри цикла вы вызываете validateTime() снова, но вы не оцениваете его результат. В результате, как только yn установлено значение false, оно никогда не сбрасывается.

Ответ №2:

Я не уверен, почему вы передаете переменную yn в свою функцию проверки. Просто верните 0 или 1, должно быть нормально. Возможно, это не решит вашу проблему.

Ваша проблема в том, что вы не устанавливаете yn результат вызова вашей функции проверки внутри вашего цикла.

Ответ №3:

Вы не сохраняете результат validateTime в yn , как при первом вызове.

Я также думаю, что вы, возможно, хотите использовать int *yn in validateTime , чтобы вы могли обновить переданную ему переменную, иначе не имело бы смысла принимать extra int в качестве аргумента. Я бы просто удалил этот аргумент и сохранил возвращаемое значение.

Поскольку это домашнее задание, я не хочу менять ваш код за вас, но предлагаю альтернативы.