把结构体放在主函数里修改,没有错误,但是用函数返回修改,就出现了问题
#include <stdio.h>
struct time{
int hour;
int minutes;
int seconds;
};
struct time timeUpdate(struct time now);
int main(void)
{
struct time testTimes[]={
{00,00,00},{06,00,01},{12,01,02},{18,02,03},{23,59,59}
};
int i;
for(i=0;1<5;i++) {
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
testTimes[i] =timeUpdate(testTimes[i]);
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
}
return 0;
}
struct time timeUpdate(struct time now)
{
++now.seconds;
if(now.seconds==60){
now.seconds=0;
++now.minutes;
if(now.minutes==60){
now.minutes=0;
++now.hour;
if(now.hour==24){
now.hour=0;
}
}
}
}
这是很正常的,因为函数调用的时候,参数now是拷贝了一份在堆栈上,你修改的是堆栈上的副本,而不是主程序里的那个 testTimes
同时你的函数没有返回修改之后的now
应该用指针或者引用
比如
#include <stdio.h>
struct time{
int hour;
int minutes;
int seconds;
};
struct time timeUpdate(struct time * now);
int main(void)
{
struct time testTimes[]={
{00,00,00},{06,00,01},{12,01,02},{18,02,03},{23,59,59}
};
int i;
for(i=0;1<5;i++) {
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
timeUpdate(&testTimes[i]);
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
}
return 0;
}
struct time timeUpdate(struct time * now)
{
++(now->seconds);
if(now->seconds==60){
now->seconds=0;
++(now->minutes);
if(now->minutes==60){
now->minutes=0;
++(now->hour);
if(now->hour==24){
now->hour=0;
}
}
}
}
或者让它返回now
#include <stdio.h>
struct time{
int hour;
int minutes;
int seconds;
};
struct time timeUpdate(struct time now);
int main(void)
{
struct time testTimes[]={
{00,00,00},{06,00,01},{12,01,02},{18,02,03},{23,59,59}
};
int i;
for(i=0;1<5;i++) {
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
testTimes[i] =timeUpdate(testTimes[i]);
printf("%i : %i : %i \n",
testTimes[i].hour,testTimes[i].minutes,testTimes[i].seconds);
}
return 0;
}
struct time timeUpdate(struct time now)
{
++now.seconds;
if(now.seconds==60){
now.seconds=0;
++now.minutes;
if(now.minutes==60){
now.minutes=0;
++now.hour;
if(now.hour==24){
now.hour=0;
}
}
}
return now;
}
不知道你这个问题是否已经解决, 如果还没有解决的话: