【问题标题】:Make a 2d array with user giving the size of the array (n*n) and the array getting filled with random numbers [1-10] without malloc制作一个二维数组,用户给出数组的大小 (n*n),数组填充随机数 [1-10] 而不使用 malloc
【发布时间】:2020-04-15 23:09:21
【问题描述】:

这是一个用随机数填充数组的函数。 n 是用户输入,p[n][n] 是我尝试创建的数组。我想使用 2 个名为 fillPin2dshowPin2d 的函数,以便一个函数用随机数填充数组,一个函数用于打印数组。程序一直要求输入一个整数,但它没有显示我创建的数组。

#include<stdio.h>
#include<stdlib.h>

void fillPin2d(int n,int p[n][n])
{
    int i,j;
    for(i=0;i<n;i++)
        for(j=0;j<n;j++)
            p[i][j]=rand()% 11;

}
void showPin(int n,int p[n][n])
{
    int i,j;

    for(i=0;i<n;i++){
        for(j=0;j<n;j++){
            printf("%d\n",p[i][j]);
        }
    }
}

main() {
   int n;

   do {
        printf("Enter an integer n>5: \n");
        scanf("%d",&n);
    }while(n<=5);

    int p[n][n];
    fillPin2d(n,p);
    showPin(n,p);
    system("pause");
}

【问题讨论】:

  • 在问题中包含代码并正确格式化。不要像这样在cmets中发布它
  • 请提出一个实际问题。您遇到了什么具体问题?
  • “运行不正确”。你能更精确一点吗?它会崩溃吗?它什么都不打印吗?它会打印一些正确的结果和一些错误的结果吗?另外,请格式化代码,使其可读。
  • 您输入的内容是什么? "Enter an integer n&gt;5 表示您输入的数字大于 5。但条件 while(n&gt;5) 将是错误的,因为除非数字小于或等于 5,否则它将继续循环。
  • 顺便说一句,这是int main(void),而不是main()。你用的是什么编译器?

标签: c arrays matrix


【解决方案1】:

您的问题是以“while”为条件的。你想要一个>5,所以你应该放入“while”应该是“n”,这样如果n实际上大于5,你就可以打破“while”。

多说一句,使用 malloc 比只使用 int p[n][n] 更好。 因为在使用int p[n][n]的时候,p的内存是在栈上分配的,如果n太大,可能会导致栈溢出。而且如果你使用malloc,空间在堆上,你可以通过realloc()轻松改变p的大小。

在许多 IDE(例如,visual studio)上,int p[n][n] 的语法是错误的,IDE 会告诉你给一个常量而不是一个变量。

我认为您可以查看更多讨论:

  1. Creating Dynamic Array without malloc
  2. Dynamic arrays in C without malloc?

【讨论】:

  • @kaylum,好的,谢谢你的建议。我将编辑我的答案
  • 我修复后的代码继续输出很多不在 [1-10] 之间的数字,我找不到我做错了什么我在互联网上到处找这就是为什么我在这里问因为我知道如果有人不在这里帮助我,没有人会。
  • @BlackMamba showPin 函数正在打印ij。它没有打印数组内容。
  • 你能建议改变吗,我不知道应该怎么做,我找不到类似的问题。
  • printf("%d\n",p[i][j]); 会好的
猜你喜欢
  • 2016-02-22
  • 2021-01-16
  • 2012-07-27
  • 1970-01-01
  • 1970-01-01
  • 2014-05-10
  • 2019-03-30
  • 1970-01-01
  • 2018-09-18
相关资源
最近更新 更多