【发布时间】:2018-07-12 16:30:20
【问题描述】:
这对我的家庭作业来说是个问题,但我在试图打印出数组时遇到了困难。该程序将提示用户输入“行数”和“列数”,但会立即终止而不打印任何内容,我不确定为什么会发生这种情况。
我的排序功能也不起作用。该代码给了我关于指针的错误,但目前对它们不太熟悉。如果有办法不用指针,我想那会更好。但如果最好的方法是使用指针,请包括它。会有很大帮助的
警告:赋值从没有强制转换的指针生成整数 [-Wint-conversion] 温度 = A[i];
错误:赋值给数组类型的表达式 A[i] = A[j];
错误:赋值给数组类型的表达式 A[j] = 温度;
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define N1 100
#define M1 100
void fillMatrix(int A[][M1], int N, int M);
int sortMatrix(int A[][M1],int rowsize, int colsize);
void displayArray(int A[][M1], int N, int M);
int main(void)
{
int array[N1][M1] = {0};
fillMatrix(array, N1, M1);
displayArray(array, N1, M1);
//sortMatrix(array, N1, M1);
return 0;
}
void fillMatrix(int A[][M1], int N, int M)
{
int rows = 0, columns = 0;
//ASK FOR ROWS
printf("Enter a number of rows: ");
scanf("%i", &rows);
if(rows < 0 && rows >= 100)
{
printf("Invalid Input.\n");
printf("Enter a number of rows: ");
scanf("%i", &rows);
}
//ASK FOR COLUMNS
printf("Enter a number of columns: ");
scanf("%i", &columns);
if(columns < 0 && columns >= 100)
{
printf("Invalid Input.\n");
printf("Enter a number of columns: ");
scanf("%i", &columns);
}
//FILLS ARRAY W/ RANDOM INT VALUES BETWEEN 0 AND 100
srand(time(NULL));
for(int i = 0; i < rows; i++)
{
for(int j = 0; j < columns; j++)
{
A[i][j] = 0 + rand() % 100;
}
}
}
/*int sortMatrix(int A[][M1],int rowsize, int colsize)
{
int temp = 0;
for(int i = 0; i < rowsize; i++)
{
for (int j = 0 ; j < colsize; j++)
{
if(A[i] > A[j])
{
temp = A[i];
A[i] = A[j];
A[j] = temp;
}
}
}
return 0;
}*/
void displayArray(int A[][M1], int N, int M)
{
for(int i = 0; i < N; i++)
{
for(int j = 0; j < M; j++)
{
printf("%i ", A[i][j]);
}
}
}
【问题讨论】:
-
A[i]和A[j]是行。您不能分配整行,只能分配元素,例如A[i][j]. -
if(rows < 0 && rows >= 100)两者都不可能是真的。使用if(rows < 0 || rows >= 100)并使用while如此重复,直到输入正确的数字。 -
如果不使用
int N, int M作为参数,为什么要传递给fillMatrix?main需要输入实际值,否则无法排序和打印。 -
您有符号常量
M1和N1用于最大数组维度。使用这些而不是常量100。例如:if (n<1 || n>N) ....` --and--printf("Rows must be from 1 to %d\n", N1); -
此外,您从未说过对二维数组进行排序的顺序是什么。
array[0][0]是否应该接收第 0 行中的 (a) 最小条目; (b) 第 0 栏中的最小条目;或 (c) 整个数组中的最小条目?您的代码看起来可能意味着(d)交换整行而不重新排序该行中的元素;所有这些选项都有不同的代码来实现它们。
标签: c pointers multidimensional-array