无法在C中打印修改后的数组

时间:2018-11-19 18:56:12

标签: c arrays function

要求用户提供一些行和列以用随机数填充10x10数组的数组(表的一部分将被填充,例如2x2)。然后一个名为printArray的函数将打印其值。然后,change_array函数将在每一行中找到最大值,并用该值替换其中剩余的元素。

例如:

初始数组

<p>41 67 34  0 </p>
<p>69 24 78 58</p> 
<p>62 64  5 45</p> 

更改后的数组

<p>67 67 34  0 </p>
<p>78 78 78 58 </p>
<p>64 64  5 45 </p>

但是,程序会给出以下信息:

初始数组

<p>41  67</p> <p>34  0</p>

更改的数组

<p>67 67</p>
<p>24576000 508</p>

为什么会这样?

  1. simpio.h获得整数输入
  2. 这不能用指针来完成(我们还没有上课)
  3. 修改后的数组必须打印在main()

    #include <stdio.h>
    #include <stdlib.h>
    #include "simpio.h"
    void populate_data(int R, int C, int A[R] [C]);
    void printArray(int R, int C, int A[R] [C]);
    void change_array(int R, int C, int A[R] [C]);
    
    int main(void)
    {
    
        int  A[10] [10],R,C,i,j;
    
        while (TRUE)
        {
            printf("Give the number of rows: ");
            R = GetInteger();
            if (R>=0 && R<=10)
                break;
            else
            {
                printf("Wrong Answer\n");
            }
        }
    
        while (TRUE)
        {
            printf("Enter the number of columns: ");
            C = GetInteger();
            if (C>=0 && C<=10)
                break;
            else
            {
                printf("Wrong Answer\n");
            }
        }
        populate_data(R,C,A);
        printf("Initial Array\n");
        printArray(R,C,A);
        change_array(R,C,A);
        printf("Changed Array\n");
    
        for (i=0; i<R; i++)
        {
            for (j=0; j<C; j++)
            {
                printf("%d ",A[i] [j]);
            }
            printf("\n");
        }
    return 0;
    }
    
    
    
    void populate_data(int R, int C, int A[R] [C])
    {
        int i,j;
    
        for (i=0; i<R; i++)
        {
            for (j=0; j<C; j++)
            {
                A[i] [j] = rand() % 100;
            }
        }
    }
    
    void printArray(int R, int C, int A[R] [C])
    {
        int i,j;
        for (i=0; i<R; i++)
        {
            for (j=0; j<C; j++)
            {
                printf("%-3d ",A[i] [j]);
            }
        printf("\n");
        }
    
    }
    
    void change_array(int R, int C, int A[R] [C])
    {
        int i, j, max[R], m[R];
        for (i=0; i<R; i++)
        {
            max[i] = A[i] [0];
            for (j=0; j<C; j++)
            {
                if (max[i]< A[i] [j])
                {
                    max[i] =A[i] [j];
                    m[i] = j;
                }
    
            }
        }
        for (i=0; i<R; i++)
        {
            for (j=0; j<C; j++)
            {
                if (j<m[i])
    
                    A[i] [j] = max [i];
    
    
            }
        }
    }
    

1 个答案:

答案 0 :(得分:2)

如果行中的最大值位于第一位置,则会发生这种情况,因此您永远都不会输入该程序段

if (max[i]< A[i] [j])
        {
            max[i] =A[i] [j];
            m[i] = j;
        }

m[i]将保持未初始化状态。只需添加

m[i] = 0;

在循环之前。

编辑: 您必须将函数定义从A[R][C]更改为A[10][10],因为此时函数R和C不为人所知。

此外,没有理由声明大小为10x10的数组。您可以从输入中获得具有正确的行数和列数的维度之后执行此操作。