C 验证功能的第二个周期无法正确验证

C 验证功能的第二个周期无法正确验证,c,C,这个程序应该接收、验证和打印小时、分钟和秒,在单独的行中接收它们。如果在第一次尝试时收到无效的输入,它将再次提示输入并检查时间。验证会导致问题,它将在第一个条目上正确验证,但是如果输入的时间不正确,它将给出无效输出并提示下一个输入,但是即使是正确/有效的输入也会出现另一个无效条目提示。。。我已经看这个太久了,我可以说我在某个阶段做了一些愚蠢的事情,但找不到它。任何帮助都将不胜感激 在循环之前,只分配一次yn。在循环内部,您再次调用validateTime,但不评估其结果。因此,一旦yn设置为fa

这个程序应该接收、验证和打印小时、分钟和秒,在单独的行中接收它们。如果在第一次尝试时收到无效的输入,它将再次提示输入并检查时间。验证会导致问题,它将在第一个条目上正确验证,但是如果输入的时间不正确,它将给出无效输出并提示下一个输入,但是即使是正确/有效的输入也会出现另一个无效条目提示。。。我已经看这个太久了,我可以说我在某个阶段做了一些愚蠢的事情,但找不到它。任何帮助都将不胜感激

在循环之前,只分配一次yn。在循环内部,您再次调用validateTime,但不评估其结果。因此,一旦yn设置为false,它就永远不会重置。

我不知道为什么要将变量yn传递到validate函数中。只需返回0或1即可。可能解决不了你的问题


您的问题是没有将yn设置为在循环中调用validate函数的结果。

您没有像第一次调用它时那样将validateTime的结果存储在yn中

我还认为您可能希望在validateTime中输入int*yn,以便更新传递给它的变量,否则将额外的int作为参数是没有意义的。我只需删除该参数并存储返回值

由于这是家庭作业,我不想为您更改代码,但建议其他方法

#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("%d\n%d\n%d", &one.hours, &one.mins, &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("%d\n%d\n%d", &one.hours, &one.mins, &one.secs);  
         validateTime(one);

      if (!yn){
            puts("Invalid input\nPlease try again"); 
         printf("\nplease enter the time in 24 hr format, \nenter the hours, return,\nenter minutes, return, enter seconds, and return.\n");
         scanf("%d\n%d\n%d", &one.hours, &one.mins, &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; 

     }
}