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("%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; 

     }
}

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

最佳答案

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

关于c - 验证函数的第二个周期无法正确验证,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8087888/

相关文章:

C函数指针混淆

c++ - C/C++ 中大文件二进制数据的逻辑操作

c - 希望信号量超过 SEM_VALUE_MAX

c - 初始化后的 glfw 段错误

c - 基于AVR32 UC3C USART中断

c - 使用 scanf 时如何绕过打印新行?

c - 用C从二进制文件中一点一点地读取

c - 对 '__divdi3' 的 undefined reference

c - 如何创建 POSIX 共享消息队列而不将其仅创建为 root 访问权限?

c++ - 将原始 PCM 转换为 FLAC?