数组中的函数不显示正确的值?

时间:2013-11-11 15:39:53

标签: c arrays function

该程序假设显示用户以3×3板方式输入的9个数字。然而,我得到的只是一些奇怪的数字。

我的disp_arr函数有问题,但我不知道那里的错误是什么。我对函数和指针都很新,但我想这就是我学习的方法!

这是我在运行时获得的输出:2686636 clone errors

/* File: StudentID_Surname.c  - e.g. 1234567_Wilson.c
 * This program finds the range between highest and lowest value of a 2-D array */

#include <stdio.h>

#define NROW 3
#define NCOL 3

/* Write a function
     void disp_arr(int a[NROW][NCOL]) { ... }
    where a[][] is the 2-D array
    Print the entire array to the screen. */

disp_arr( int temp );

int main(void)
{
    /* declare needed variables or constants, e.g. */
    int ar[NROW][NCOL];
    int rows, cols;
    int temp[9] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */

    /* prompt for the user to enter nine positive integers to be stored into the array */
    int index = 0;
    printf(  "Please enter 9 positive integers :\n");
    for ( rows = 0 ; rows < 3 ; rows++ )
    {
        for ( cols = 0 ; cols < 3 ; cols++ )
            {
                scanf( "%d", &ar[rows][cols] );

                /* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/
                temp[index] = ar[rows][cols];

                index += 1; /* Increase the array in temp[z] */
            }
    }

    /* Call disp_arr to display the 3 x 3 board */
    disp_arr( temp );

}/* end main */

disp_arr( int storedValue )
{
    int x,y;
    for (  x = 0 ; x < 3 ; x++ )
    {
        for (  y = 0 ; y < 3 ; y++ )
        {
            printf( "%d\t", storedValue );
        }
        printf("\n");
    }
}

我考虑过包含storedValue[counter]之类的计数器,但它会返回更多错误= /

disp_arr( int storedValue )
    {
        int x,y;
        int counter = 0
        for (  x = 0 ; x < 3 ; x++ )
        {
            for (  y = 0 ; y < 3 ; y++ )
            {
                printf( "%d\t", storedValue[counter] );

                counter += 1;
            }
            printf("\n");
        }
    }

任何帮助将不胜感激。

提前致谢!

萨姆

/* Editted code after haccks and Rohan's advice */
#include <stdio.h>

#define NROW 3
#define NCOL 3

/* Write a function
     void disp_arr(int a[NROW][NCOL]) { ... }
    where a[][] is the 2-D array
    Print the entire array to the screen. */

disp_arr( int temp );

int main(void)
{
    /* declare needed variables or constants, e.g. */
    int ar[NROW][NCOL];
    int rows, cols;
    int temp[9] = {1,2,3,4,5,6,7,8,9}; /* Storing 9 numbers */

    /* prompt for the user to enter nine positive integers to be stored into the array */
    int index = 0;
    printf(  "Please enter 9 positive integers :\n");
    for ( rows = 0 ; rows < 3 ; rows++ )
    {
        for ( cols = 0 ; cols < 3 ; cols++ )
            {
                scanf( "%d", &ar[rows][cols] );

                /* Store values in the temp[z] = {1 2 3 4 5 6 7 8 9}*/
                temp[index] = ar[rows][cols];

                index += 1; /* Increase the array in temp[z] */
            }
    }

    /* Call disp_arr to display the 3 x 3 board */
    disp_arr( *temp );

}/* end main */

disp_arr( int storedValue )
    {
        int x,y;
        int counter = 0;
        for (  x = 0 ; x < 3 ; x++ )
        {
            for (  y = 0 ; y < 3 ; y++ )
            {
                /* How on earth do I include the counter inside without errors??*/
                printf( "%d\t", storedValue );

                counter += 1;
            }
            printf("\n");
        }
    }

3 个答案:

答案 0 :(得分:1)

temp传递给disp_array表示您传递的是数组temp的第一个元素的地址(因为它会在这种情况下衰减为指针)你的功能。为此,函数参数必须是int *类型。

将您的disp_array声明为

void disp_arr( int *temp);   

将其命名为

disp_array(temp);  

将您的功能定义更改为

void disp_arr( int *storedValue )
{
    int i;
    for (  i = 0 ; i < NROW*NCOL ; i++ )
    {
            printf( "%d\t", storedValue[i] );
                printf("\n");
    }
}

答案 1 :(得分:1)

disp_arr()应该使用int *参数而不是int

并按照第二个功能打印出来。

printf( "%d\t", storedValue[counter] );

答案 2 :(得分:0)

与您的功能问题没有直接关系,但我认为您可以清理主要的for循环。因为看起来你对你的ar数组做了什么,你可以做类似下面的事情(仔细检查我的语法错误,因为我现在不在编译器,但希望这个想法很清楚):

int main(void)
{
    /*declare needed variables or constants, e.g. */
    int total = NROW * NCOL;
    int temp[total];
    printf("Please enter %d positive integers :\n", total);
    for(int i = 0; i < total; i++)
    {
        scanf("%d", temp[i]);
    }

    // Print the array.
    disp_arr(temp);
 }