#c
#c
Вопрос:
#include <stdio.h>
#include <stdlib.h>
struct time{int hours, mins, secs;};
int main(int argc, char *argv[])
{
struct time one;
struct time two;
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);
int yn;
yn = validateTime(one, yn);
while(!yn){
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);
yn = 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);
char input[4];
puts("would you like to update the time");
scanf("%s", input);
if(strcmp(input,"yes")== 0){
puts("please enter update for time");
scanf("%dn%dn%d", amp;two.hours, amp;two.mins, amp;two.secs);
if (two.hours > 0|| two.mins > 0 || two.secs > 0){
struct time updateTime(one, two);
printf ("%d", one.hours);
}
}
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;
}
}
struct time updateTime(struct time one, struct time two){
puts("flag1");
struct one;
struct two;
puts("flag");
one.hours = one.hours two.hours;
one.mins = one.mins two.mins;
one.secs = one.secs two.secs;
while (two.hours > 23) {
one.hours = one.hours - 24;}
while (two.mins > 59){
one.mins = one.mins - 60;
one.hours ;}
while (two.secs > 59){
one.secs = one.secs - 60;
one.mins ;}
return one;
}
программа принимает структуру времени, проверяет ее как 24-часовое время и запрашивает у пользователя обновление, принимает обновление в HH: MM: SS, т.Е. если время было 23: 45:00, а введенное время обновления было 01: 30:00, тогда исходное время стало бы 01: 15:00.
Я хочу изменить struct one в function UpdateTime, похоже, что функция вообще не выполняется. как я могу заставить это работать? в настоящее время он будет выполняться по полной программе без ошибок, НО он не изменит время и не передаст его обратно в основную функцию, в настоящее время просто тестируется с часами.
Ответ №1:
Вы передаете структуры функциям подобным образом, не делайте этого никаким другим способом:
typedef struct // use typedef for convenience, no need to type "struct" all over the place
{
int x;
int y;
} Data_t;
void function (Data_t* data); // function declaration
int main()
{
Data_t something = {1, 1}; // declare a struct variable and initialize it
printf("%d %dn", something.x, something.y);
function (amp;something); // pass address of "something" to the function
/* since it was passed through a pointer (by reference),
the original "something" struct is now modified */
printf("%d %dn", something.x, something.y);
}
void function (Data_t* data) // function definition
{
data->x = 2; // access a struct member through a pointer using the -> operator
data->y = 2;
}
Редактировать: Кстати, data->x
это точно то же самое, что и (*data).x
, просто немного легче читать первое.
Ответ №2:
Вы вызываете функцию как:
struct time updateTime(one, two);
что неверно. На самом деле это объявление функции, а не вызов.
Комментарии:
1. Я думаю, что OP понимает, что он делает это неправильно, иначе он бы вообще не спрашивал…
2. @Ludin спасибо кому-нибудь еще, кто понимает, что если вы задаете вопрос, на который обычно хотите получить ответ!