输入的时间若不符合要求,如何在不退出程序的情况下可以重新输入时间

这是我的代码,不知道为什么输入错误时会出现无限循环,能否更改一下完成:
(1)用以下结构体表示24小时制的时间
struct Time
{
int hours;
int minutes;
int seconds;
};
(2)从键盘输入时间(时、分、秒)到结构体变量中,如输入的时间不符合要求,在不退出程序的情况下可以重新输入时间。
#include
#include
int main()
{
struct Time
{
int hours;
int minutes;
int seconds;
};
int i;
struct Time T[i];
ap:printf("请输入时,分,秒:");
scanf("%d,%d,%d");
while(T[i].hours>24||T[i].hours<0||T[i].minutes>60||T[i].minutes<0||T[i].seconds>60||T[i].seconds<0)
{printf("请输入时,分,秒:");
goto ap;
while(getchar()!='\n');
}
printf("请输入时,分,秒:");
}



 
for(;;)
{
    if(时间错误)
        continue; //继续下一轮循环
    else
 {正常时间语句,加上break;}
}

while(1)
{
    //提示和输入

    if(时间错误条件)
        continue; //继续下一轮循环

    //正常处理,break跳出循环
}