#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/