返回c中的数组以计算数字

时间:2019-01-23 15:49:26

标签: c

因为我是C编程的初学者。我试图在程序中返回一个数组,但无法正常工作。 这是代码

#include<stdio.h>
void main()
{
    int x,y,z;
    printf("Enter any three numbers separated with a single space : ");
    scanf("%d %d %d", &x, &y, &z);
    int * result = calc(x,y,z);
    printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
calc(int x, int y, int z){
    static int * result[3] = {0,0,0};
    if(x>y && x>z){
        result[0] = x;
        if(y<z){
            result[2] = y;
            result[1] = z;
        }
    }else if(y>x && y>z){
        result[0] = y;
        if(x<z){
            result[2] = x;
            result[1] = z;
        }
    }else if(z>x && z>y){
        result[0] = z;
        if(y<x){
            result[2] = y;
            result[1] = x;
        }
    }
    return result;
}

我搜索了很多东西,但是我听不懂或代码对我不起作用。

5 个答案:

答案 0 :(得分:3)

在calc函数中-

div.logo {
    // Will be parsed by angular-cli at build time
    // and will be moved and reinjected in css as `dist/logo-r456dfq962ghz32.jpg`
    background: url('/assets/images/logo.jpg');
}

是3个整数指针的数组。

整数数组应仅声明为

<img
    class="background"
    src="assets/images/logo@1x.jpg"
    srcset="
        assets/images/logo@1x.jpg 1366w,
        assets/images/logo@2x.jpg 2732w,
        assets/images/logo@3x.jpg 4098w
    "
    sizes="100vw"
/>

答案 1 :(得分:2)

#include<stdio.h>

int *calc(int x, int y, int z);
int main()
{
    int x,y,z;
    printf("Enter any three numbers separated with a single space : ");
    scanf("%d %d %d", &x, &y, &z);
    int * result = calc(x,y,z);
    printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
int *calc(int x, int y, int z){ // first this the right way to declare it
     static  int result[3] = {0,0,0};

    if(x>y && x>z){
        result[0] = x;
        if(y<z){
            result[2] = y;
            result[1] = z;
        } // second you forgot to consider the else case like this :) i 've changed it on the other ifs too
        else{
             result[1] = y;
            result[2] = z;
        }
    }
     if(y>x && y>z){
        result[0] = y;
        if(x<z){
            result[2] = x;
            result[1] = z;
        }else{
         result[1] = x;
            result[2] = z;
        }

    }
     if(z>x && z>y){
        result[0] = z;
        if(y<x){
            result[2] = y;
            result[1] = x;
        }else{
        result[1] = y;
            result[2] = x;}
    }
    return result;
}

答案 2 :(得分:2)

由于各种原因,您不能从函数中返回一个数组。通常更好的选择是将目标数组作为参数传递给函数(假设您知道数组的大小需要提前):

/**
 * This version of calc doesn't return anything, so it's typed void
 */
void calc( int x, int y, int z, int *result, size_t result_size )
{
  if ( x > y && x > z )
    result[0] = x;
  ...
}

/**
 * Unless your compiler documentation *explicitly* lists void main()
 * as a valid signature, use int main( void ) instead.  
 */
int main( void )
{
  int result[3] = {0, 0, 0};
  ...
  calc( x, y, z, result, sizeof result / sizeof result[0] );
  ...
}

除非您的函数弄乱了以0结尾的字符串(或数组内容中的某些其他哨兵值),否则您需要将数组大小作为单独的参数传递。数组表达式作为函数参数传递时会失去其“数组性质”,因此您需要单独跟踪其大小(sizeof arr / sizeof arr[0]在指针上不起作用)。

答案 3 :(得分:1)

您的程序存在一些问题。

  1. int * result = calc(x,y,z);-但是calc返回int(因为未指定返回类型)

  2. static int * result[3] = {0,0,0};-result是一个指向int的指针,大小为3的数组。但是,您已经将它们分别初始化为0。如果您了解这里发生的情况,这并不是问题。实际上,只需要一个简单的数组就可以了。

  3. return result;您将返回result,但是函数calc的返回类型默认为int。
  4. calc函数没有原型。

这是您的程序的外观:

#include<stdio.h>

int * calc(int, int, int);

void main()
{
    int x,y,z;
    printf("Enter any three numbers separated with a single space : ");
    scanf("%d %d %d", &x, &y, &z);
    int * result = calc(x,y,z);
    printf("The big number is %d \n The middle number is %d \n The small number is %d", result[0], result[1], result[2]);
}
int *calc(int x, int y, int z){
    static int result[3] = {0,0,0};
    if(x>y && x>z){
        result[0] = x;
        if(y<z){
            result[2] = y;
            result[1] = z;
        }
    }else if(y>x && y>z){
        result[0] = y;
        if(x<z){
            result[2] = x;
            result[1] = z;
        }
    }else if(z>x && z>y){
        result[0] = z;
        if(y<x){
            result[2] = y;
            result[1] = x;
        }
    }
    return result;
}

话虽如此,您的程序似乎无法按预期运行。看看下面的输出:

Enter any three numbers separated with a single space : 12 33 4
The big number is 33 
 The middle number is 0 
 The small number is 0
shell returned 69


Enter any three numbers separated with a single space : 100 3 4
The big number is 100 
 The middle number is 4 
 The small number is 3
shell returned 70

您可能想研究逻辑。

答案 4 :(得分:0)

  1. 除非您知道其中的含义,否则不要使用静态。考虑到您是初学者,请尝试仅坚持使用局部变量
  2. 您要执行的操作是在calc函数处理完后返回一个3个整数的数组。在这里,您有2个选择:
    • 将“空” ( {0,0,0} )数组作为该函数的参数传递,因此result也将在main范围内被修改。
    • 返回已在calc函数中初始化的数组。

无论哪种方式,您都必须学习C如何管理动态分配的内存。

1)您声明一个指向所需数据类型的指针

int *result;

2)您为该指针分配内存(基本上是初学者,它将变成数组)

result = malloc(3 * sizeof(int));

您可以使用void* malloc(size_t memory_block)(不会初始化内存)或void* calloc(size_t number_of_blocks, size_t block_size)将所有内存设置为0

3)您可以使用calc数组在result函数中处理数据。

4)不管选择哪种方式(关于2),您的函数都应该返回一些内容。 如果将数组作为参数传递,则应返回void,否则应返回int*,其基本上转换为它返回一个指向int 的指针(并考虑到您分配的该指针的内存,现在它基本上返回一个数组)