#c
#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("%dn%dn%d", amp;one.hours, amp;one.mins, amp;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("%dn%dn%d", amp;one.hours, amp;one.mins, amp;one.secs);
validateTime(one);
if (!yn){
puts("Invalid inputnPlease try again");
printf("nplease enter the time in 24 hr format, nenter the hours, return,nenter minutes, return, enter seconds, and return.n");
scanf("%dn%dn%d", amp;one.hours, amp;one.mins, amp;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;
}
}
предполагается, что эта программа принимает, проверяет и печатает часы, минуты и секунды (записывая их в отдельных строках), если с первой попытки вводится неверный ввод, она снова запрашивает ввод и проверяет время. проверка вызывает проблемы, она будет корректно проверена при первом вводе, однако, если вы введете неправильное время, это выдаст неверный вывод и предложит следующий ввод, однако даже правильный / допустимый ввод вызовет другой запрос на недопустимый ввод… Я слишком долго смотрел на это, я могу сказать, что на каком-то этапе я сделал что-то глупое, но не могу найти это. Любая помощь была бы очень признательна.
Ответ №1:
Вы назначаете yn
только один раз, перед циклом. Внутри цикла вы вызываете validateTime()
снова, но вы не оцениваете его результат. В результате, как только yn
установлено значение false, оно никогда не сбрасывается.
Ответ №2:
Я не уверен, почему вы передаете переменную yn
в свою функцию проверки. Просто верните 0 или 1, должно быть нормально. Возможно, это не решит вашу проблему.
Ваша проблема в том, что вы не устанавливаете yn
результат вызова вашей функции проверки внутри вашего цикла.
Ответ №3:
Вы не сохраняете результат validateTime
в yn
, как при первом вызове.
Я также думаю, что вы, возможно, хотите использовать int *yn
in validateTime
, чтобы вы могли обновить переданную ему переменную, иначе не имело бы смысла принимать extra int
в качестве аргумента. Я бы просто удалил этот аргумент и сохранил возвращаемое значение.
Поскольку это домашнее задание, я не хочу менять ваш код за вас, но предлагаю альтернативы.