【问题标题】:Taking Output of function and putting it into another function in C获取函数的输出并将其放入 C 中的另一个函数中
【发布时间】:2020-07-30 03:32:07
【问题描述】:

所以,我试图把一个函数的输出放到另一个函数中

这是我试图获得输出和输入的函数,您可以忽略第二个函数内部,我只是简单地输入printf 来检查变量是否正确。

int guess(int a, int b){
    printf("\nEnter you guess: ");
    scanf("%d,%d", &a, &b);
    return a, b;
}

int check(int a, int b){
    printf("%d %d ",a,b);
}

这里是代码:

#include <stdio.h>

int main(){
    int row, column;
    guess(row, column);
    check(row, column);
}

int guess(int a, int b){
    printf("\nEnter you guess: ");
    scanf("%d,%d", &a, &b);
    return a, b;
}

int check(int a, int b){
    printf("%d %d ",a,b);
}

我试图简单地说出来是为了更清楚地了解如何做。

当我运行代码并输入坐标时,例如:4,5,它只打印出0 1

另外,数组可以做到吗?

【问题讨论】:

  • 仅供参考,C 函数(如 guess(...))只能返回 一个 值。你的声明,return a, b; 没有做你认为的事情。表达式a, b 是一个comma expression。它评估a 的副作用(没有副作用,但显然你的编译器不会警告你),然后它返回b....的值。Just b 的值。
  • 您对guess(...) 的实现还差得很远。就好像您试图通过猜测单词和符号的含义来学习C。如果你找到并遵循一个好的教程,我认为你会学得更快。
  • 您不希望将输入函数的结果直接返回给使用这些值的函数。为什么?如果不检查返回,您将无法正确使用输入函数。您必须针对 (1) EOF 进行验证; (2) matchinginput 失败或 (3) 良好的输入 before 使用填充的值scanf().
  • 您有两个选择:1) 返回 int 数组 2) 回调函数。您的返回类型 int 意味着您只能返回一个值

标签: c function input output


【解决方案1】:

1) 您需要使用原型或向前声明您的函数。

2) 你不能在 C 中从一个函数中返回 2 个变量,但你可以传递一个数组并读/写他的值:

#include <stdio.h>

void guess(int arr[])
{
    printf("\nEnter you guess: ");
    scanf("%d,%d", &arr[0], &arr[1]);
}

void check(int arr[])
{
    printf("%d %d ",arr[0], arr[1]);
}

int main(void)
{
    int arr[2];

    guess(arr);
    check(arr);
    return 0;
}

或者你可以传递一个参考

void guess(int *a, int *b)
{
    printf("\nEnter you guess: ");
    scanf("%d,%d", a, b);
}

guess(&a, &b);

【讨论】:

    【解决方案2】:

    你在guess函数中读取的输入数字实际上只被读取到局部变量ab中。您需要传递指针才能读入main 中的变量。

    C 中的函数也无法返回多个值。

    #include <stdio.h>
    
    void guess(int *a, int *b)
    {
        printf("\nEnter you guess: ");
        scanf("%d,%d", a, b);
    }
    
    int check(int a, int b)
    {
        printf("%d %d " ,a, b);
    }
    
    int main()
    {
        int row = 0, column = 0;
        guess(&row, &column);
        check(row, column);
    }
    

    您还应该检查scanf 的返回值是否失败。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2022-01-04
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-05-20
      • 1970-01-01
      • 2021-11-19
      相关资源
      最近更新 更多