C函数返回两个值

时间:2013-03-07 17:51:29

标签: c function

我必须在C中完成以下作业。

  

编写一个函数,要求用户输入两个正整数,读取这两个数字,比如a和b,并一直询问它们,直到用户输入两个这样的数字。该函数将两个数字都返回到调用它的位置。

我在这里有点困惑。我如何要求用户从函数中输入两个值?你不能只从main()函数执行此操作吗?截至目前,我有以下功能代码。它运行正常,但我当然需要在外部函数中使用它。

#include <stdio.h>

int main() {

int a(2); // initialize just as some positive number so as not to set off negative alert.
int b(2);
printf("Enter two positive numbers: \nFirst: ");
do {
    if (a <= 0 || b <= 0) { // negative alert
        printf("Woops. Those are negative. Try again. \nFirst: ");
    }
    scanf(" %d", &a);
    printf("Second: ");
    scanf(" %d", &b);
    printf("\n");
} while (a <= 0 || b <= 0);

return(0);
}

3 个答案:

答案 0 :(得分:2)

cc++中的

函数(oop中的方法)(实际上在我知道的其他每种编程语言中)只能返回一个值。使用一个包含两个值的结构并从函数中返回它

#include<stdio.h>
#include<stdlib.h>

typedef struct two_ints {
    int a, b;
} two_ints_t;

two_ints_t read_two_ints();

two_ints_t read_two_ints() {
    two_ints_t two_ints;
    two_ints.a = 0;
    two_ints.b = 0;
    char tmp[32] = "";
    printf("Enter two positive numbers: \nFirst: ");
    do {
        scanf(" %s", tmp);
        two_ints.a = atoi(tmp);
        printf("Second: ");
        scanf(" %s", tmp);
        two_ints.b = atoi(tmp);
        printf("\n");
        if (two_ints.a <= 0 || two_ints.b <= 0) { // negative alert
            printf("Woops. Those are negative. Try again. \nFirst: ");
        }
    } while (two_ints.a <= 0 || two_ints.b <= 0);

    return two_ints;
}

int main() {
    two_ints_t two_ints = read_two_ints();
    printf("a=%i, b=%i\n", two_ints.a, two_ints.b);
    return 0;
}

答案 1 :(得分:1)

main唯一特别之处在于它是您的应用程序的切入点。无论何时你想要 1 ,你都可以打电话。一旦指令指针到达入口点中的第一条指令,它就只是从那里开始的操作码流。除了跳跃之外你还有“功能”这一事实没什么特别之处。你也可以内联它们。

将代码伪装成另一种方法只会对传递和返回信息产生影响:

/* this signature will change if you need to pass/return information */
void work()
{
    int a = 2; /* did you really mean C++? */
    int b = 2;
    printf("Enter two positive numbers: \nFirst: ");
    do {
        if (a <= 0 || b <= 0) { /* negative alert */
            printf("Woops. Those are negative. Try again. \nFirst: ");
        }

        scanf(" %d", &a);
        printf("Second: ");
        scanf(" %d", &b);
        printf("\n");
    } while (a <= 0 || b <= 0);
}

这样称呼:

int main(int argc, char **argv)
{
    work(); /* assuming it is defined or declared above us */

    return 0;
}

<子> 1。对于“任何”和“随时”的合理定义。

答案 2 :(得分:1)

没有人提到的一个技巧是从函数返回多个值的另一种方法是将指针作为参数传递。执行此操作的常见功能是scanf:

int x,y;
scanf("%d %d", &x, &y);

您可以将此代码视为scanf返回两个值并将它们分配给x和y。