2

该程序假设以 3 x 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");
        }
    }
4

3 回答 3

1

通过传递tempdisp_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");
    }
}
于 2013-11-11T15:42:02.893 回答
1

disp_arr()应该带int *参数而不是int.

并像在您的第二个功能中一样打印它。

printf( "%d\t", storedValue[counter] );
于 2013-11-11T15:42:15.053 回答
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);
 }
于 2013-11-11T16:09:49.870 回答