#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 :(得分:0)
在循环之前只分配yn
一次。在循环内部,您再次调用validateTime()
,但不评估其结果。因此,一旦yn
设置为false,就永远不会重置。
答案 1 :(得分:0)
我不确定为什么要将变量yn
传递给验证函数。只返回0或1应该没问题。可能无法解决您的问题。
您的问题是您没有将yn
设置为在循环中调用验证函数的结果。
答案 2 :(得分:0)
您没有像第一次打电话那样将validateTime
的结果存储在yn
中。
我也认为你可能想要在int *yn
中加入validateTime
,这样你就可以更新传递给它的变量,否则就没有必要采取额外的int
作为一个论点。我只是删除该参数并存储返回值。
由于这是家庭作业,我不想为你改变你的代码,而是建议替代方案。