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

标签 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];
    
    
            }
        }
    }
    

最佳答案

如果一行中的最大值在第一个位置,就会发生这种情况,所以你永远不会进入这个 block

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 的数组。在从具有正确行数和列数的输入中获取维度后,您可以执行此操作。

关于无法在 C 中打印修改后的数组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53380980/

相关文章:

swift - 为什么闭包捕获引用而函数不捕获引用?另外,为什么闭包声明需要 "lazy"关键字?

c - 调用函数时一些数据从指针中消失

C - 存储到空指针错误,段错误

c - 如何提高 memcpy 的性能

java - 数组排序、ArrayList 排序、使用集合

c - 从函数返回的 char* 数组打印不正确的值(可能是内存管理)

arrays - "Find all triplets whose sum is less than some number"是否有比 O(n3) 运行时间更好的解决方案?

c - 使用指针时类型不兼容

c - 结构中的数组分配在哪里?

javascript - 在返回之前制作一个等待事件的函数?