0

我想将整数传递给函数,让函数对其进行编辑,然后将整数传回主函数。我正在为此努力,但它不起作用。

这是我的代码:

int update_SEG_values(int DIGIT_1, int DIGIT_2) {

    // How many tens in the "TEMP_COUNT".
    DIGIT_2 = ((TEMP_COUNT) / 10);

    // How much is left for us to display.
    TEMP_COUNT = TEMP_COUNT - ((DIGIT_2) * 10);

    // How many ones.
    DIGIT_1 = ((TEMP_COUNT) / 1);

    return(DIGIT_1, DIGIT_2);
}

我在这里做错了什么?

4

5 回答 5

2

C中只能返回一个值

当你给:

return(DIGIT_1, DIGIT_2);

由于逗号运算符DIGIT_2将被返回。有关更多信息,请参阅http://en.wikipedia.org/wiki/Comma_o​​perator

您可以通过使用指针或结构来完成您的工作(两个数字都将是相同结构的一部分并且您返回相同)

于 2012-12-10T15:58:41.233 回答
1

C 不允许您返回多个值。如果您需要更改传递给函数的值,则需要通过指针传递:

void update_SEG_values(int *DIGIT_1, int *DIGIT_2) // Note the void

在函数内部,取消引用指针以更改值:

*DIGIT_2 = ((TEMP_COUNT) / 10); // Note the asterisk
...
*DIGIT_1 = ((TEMP_COUNT) / 1);

调用函数时,需要将指针传递给变量,如下所示:

int digit1 = 5, digit2 = 1;
update_SEG_values(&digit1, &digit2); // Note the ampersands
于 2012-12-10T15:59:05.383 回答
0

您不能一次返回两个值。考虑使用指针,以便修改值本身而不返回任何内容。

// note the change to "void" in the function's signature--it will not return anything,
// rather, it will change the information passed in through the pointer parameters
void update_SEG_values(int *DIGIT_1, int *DIGIT_2)
{
    // How many tens in the "TEMP_COUNT".
    *DIGIT_2 = ((TEMP_COUNT) / 10);

    // How much is left for us to display.
    TEMP_COUNT = TEMP_COUNT - ((DIGIT_2) * 10);

    // How many ones.
    *DIGIT_1 = ((TEMP_COUNT) / 1);
    // The variables passed in as params for DIGIT_1 and _2 will be updated
    // in the main function w/o needing to return anything
}

有关指针的更多信息

于 2012-12-10T15:58:20.200 回答
0

将变量的地址传递给函数。如果进行了任何更改,那么它将被反映。

update_SEG_values(int *DIGIT_1, int *DIGIT_2)
{

...
}

使用 int 值的地址调用函数,例如,

int a, b;
update_SEG_values(&a, &b);

返回两个整数不符合您的目的。

查看修改后的代码。我猜你会照顾 TEMP_COUNT。

void update_SEG_values(int *DIGIT_1, int *DIGIT_2) {

    /* How many tens in the "TEMP_COUNT". */
    *DIGIT_2 = ((TEMP_COUNT) / 10);

    /* How much is left for us to display. */
    TEMP_COUNT = TEMP_COUNT - ((*DIGIT_2) * 10);

    /* How many ones. */
    *DIGIT_1 = ((TEMP_COUNT) / 1);

    return; //No use anyway. 
}
于 2012-12-10T15:58:49.980 回答
0

有两种选择。您可以通过引用传递整数并且没有返回值,或者您可以为您尝试返回的元组创建一个结构。

第一种方式看起来像:

void update_SEG_values(int* DIGIT_1, int* DIGIT_2) {

    /* How many tens in the "TEMP_COUNT". */
    *DIGIT_2 = ((TEMP_COUNT) / 10);

    /* How much is left for us to display. */
    TEMP_COUNT = TEMP_COUNT - ((*DIGIT_2) * 10);

    /* How many ones. */
    *DIGIT_1 = ((TEMP_COUNT) / 1);
}

int main() {
    int x = 111, y = 222;
    int result = update_SEG_values(&x, &y);
    ....

}

第二种方式看起来像:

struct tuple {
    int DIGIT_1;
    int DIGIT_2;
};

struct tuple update_SEG_values(int DIGIT_1, int DIGIT_2) {

    /* How many tens in the "TEMP_COUNT". */
    DIGIT_2 = ((TEMP_COUNT) / 10);

    /* How much is left for us to display. */
    TEMP_COUNT = TEMP_COUNT - ((DIGIT_2) * 10);

    /* How many ones. */
    DIGIT_1 = ((TEMP_COUNT) / 1);

    struct tuple result;
    result.DIGIT_1 = DIGIT_1;
    result.DIGIT_2 = DIGIT_2;
    return result;
}

我还注意到您没有在任何地方定义 TEMP_COUNT。它应该在 update_SEG_values 中使用它之前进行初始化,可能作为该函数的第一行。

于 2012-12-10T16:03:08.360 回答