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

时间:2011-11-10 23:32:19

标签: 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; 

     }
}

这个程序应该接收,验证和打印小时,分钟和秒(如果它们分开排列)如果在第一次尝试时输入无效,它将再次提示摄入并检查时间。验证导致问题,它将在第一个条目上正确验证,但是如果你输入的时间不正确,它将提供无效输出并提示下一个输入,但即使正确/有效的输入也会显示另一个无效的输入提示。 ..我一直在看这个太久了,我可以说我在某个阶段做了一些愚蠢但却找不到它。任何帮助将非常感谢。

3 个答案:

答案 0 :(得分:0)

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

答案 1 :(得分:0)

我不确定为什么要将变量yn传递给验证函数。只返回0或1应该没问题。可能无法解决您的问题。

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

答案 2 :(得分:0)

您没有像第一次打电话那样将validateTime的结果存储在yn中。

我也认为你可能想要在int *yn中加入validateTime,这样你就可以更新传递给它的变量,否则就没有必要采取额外的int作为一个论点。我只是删除该参数并存储返回值。

由于这是家庭作业,我不想为你改变你的代码,而是建议替代方案。