2011-11-10 45 views
0
#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; 

    } 
} 

这个程序应该采取,验证和打印时,分和秒(在考虑他们在不同的行)如果它得到在第一无效输入尝试将提示再次摄入并检查时间。验证会导致问题,它将在第一个条目上正确验证,但是如果您输入的时间不正确,将会输出无效的输出并提示下一个输入,但即使正确/有效的输入也会导致另一个无效的输入提示。 ..我一直在寻找这个太久,我可以告诉我在某个阶段做了一些愚蠢的事情,但找不到它。任何帮助将非常感激。验证函数的第二周期不会验证正确

回答

0

在循环之前,您只指定yn一次。在循环内部,您再次拨打validateTime(),但您不会评估其结果。因此,一旦yn设置为false,它将永远不会重置。

0

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

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

0

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

我也认为你可能想要在 validateTime,所以你可以更新传递给它的变量,否则将额外的int作为参数是没有意义的。我会简单地删除该参数并存储返回值。

由于这是作业,我不想为你更改你的代码,但建议替代方案。