我有以下功能:
int conMS(time_in_seconds) {
int minutes, seconds;
minutes = time_in_seconds / 60;
seconds = time_in_seconds % 60;
return minutes, seconds;
}
当在另一个函数中使用时,我收到几条错误消息:
warning: left-hand operand of comma expression has no effect [-Wunused-value]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
minutes,seconds = conMS(time);
warning: ‘minutes’ is used uninitialized in this function [-Wuninitialized]
warning: left-hand operand of comma expression has no effect [-Wunused-value]
return minutes, seconds;
无论如何,有没有办法可以从函数中返回两个值。这两个值可以是任何内容:int
和char
,float
和int
......
我很抱歉,如果这对你来说很简单,但我是C的初学者,我能学到的唯一方法就是提问。另外,请尽量简化您的解释。
更新:这可以通过指针轻松完成,如下所示。
void conMS(int time,
int *minutesP, /* a pointer to variable minutes */
int *secondsP) // a pointer to variable seconds //
{
*minutesP = time / 60;
*secondsP = time % 60;
}
稍后您将此函数称为:
conMS( 210, &minutes, &secs) /* Where minutes, secs are defined integers */
这会将时间(以秒为单位)分配给变量minutes
,并为变量secs
指定秒数
答案 0 :(得分:18)
两种选择:
1)传递指向要修改的变量的指针。然后你的函数原型变成
int conMS(time_in_seconds, int* minutes, int* seconds)
2)使用包含struct
和minutes
成员的seconds
作为会员并返回。
我更喜欢(1),因为在(2)的情况下,我总是担心不必要的价值副本,并且在依赖返回值优化时会感到紧张,因为它本质上是编译器的选择,标准C没有强制要求。此外,来电者语法comMS(time_in_seconds, &minutes, &seconds)
告诉我期望 minutes
和seconds
被修改。
一些惯例也随着选项(1)的增长而增长:零结果通常表示成功,非零表示失败。
答案 1 :(得分:9)
您可以创建结构并将其返回
struct time{
int minutes;
int seconds;
};
struct time conMS(time_in_seconds)
{
struct time ret;
ret.minutes = time_in_seconds / 60;
ret.seconds = time_in_seconds % 60;
return ret;
}
答案 2 :(得分:7)
你可以使用指针..
void conMS(int time_in_seconds, int * minutes, int * seconds)
{
*minutes = time_in_seconds / 60;
*seconds = time_in_seconds % 60;
}
你可以这样称呼它......
int time = 187;
int m, s;
conMS(time, &m, &s);
答案 3 :(得分:3)
您一次不能return
来自某个函数的2个值。
您可以将这些值放在结构中,return
结构如下所示:
typedef struct time
{
int minutes;
int seconds;
}Time;
Time conMS(int time_in_seconds)
{
Time t;
t.minutes = time_in_seconds / 60;
t.seconds = time_in_seconds % 60;
return t;
}
答案 4 :(得分:3)
使用结构包含分钟和秒并返回结构。
struct time{
int hours;
int minutes;
int seconds;
};
struct time conMS(time_in_seconds)
{
struct time t;
int minutes, seconds;
minutes = time_in_seconds / 60;
seconds = time_in_seconds % 60;
t.minutes = minutes;
t.seconds = seconds;
return t;
}
答案 5 :(得分:2)
根据您的要求声明一个包含变量的结构,并返回该结构的对象。
struct name
{
int minutes;
int seconds;
};
struct name conMS(time_in_seconds)
{
struct name obj; /*structure object which contains both*/
obj.minutes = time_in_seconds / 60;
obj.seconds = time_in_seconds % 60;
return obj;
}
main()
{
struct name obj = canMS(60);
printf( " %d %d \n", obj.minutes, obj.seconds ) ;
}
obj.minutes& obj.seconds是你的变量。