-1

我必须在 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);
}
4

3 回答 3

2

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

#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;
}
于 2013-03-07T18:00:03.840 回答
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. 对于“无论什么”和“无论何时”的合理定义。

于 2013-03-07T17:56:43.533 回答
1

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

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

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

于 2013-03-07T18:09:19.027 回答