【发布时间】:2019-12-19 10:58:45
【问题描述】:
作为家庭作业,我需要扫描 N 个矩阵和一个用户输入的整数,并扫描是否有任何矩阵值包含该数字 不使用指针。
一旦我完成扫描数组并退出函数,数组的内容将重置为零,如果我不初始化数组,则将其丢弃。
#pragma warning(disable:4996)
#include<stdio.h>
#define N 2
int exist(int matrix[][N], int elem);
void input_matrix(int matrix[][N], int size);
void main()
{
int matrix_1[][N] = { 0 }, matrix_2[][N] = { 0 }, matrix_3[][N] = { 0 };
int elem;
printf("please enter values of squared matrix:\n");
input_matrix(matrix_1[][N], N);
//(input_matrix(&matrix_2[N][N]));
// (input_matrix(&matrix_3[N][N]));
printf("please enter number to search for in the matrix:\n");
scanf("%d", &elem);
if (exist(matrix_1,elem))
//printf("exist.");//the next part of h.w to be written when input func works
}
void input_matrix(int matrix[][N], int size)//something here fishy
{
int i, j;
for (i = 0; i < size; i++)
{
for (j = 0; j < size; j++)
{
scanf("%d", &matrix[i][j]);
}
}
}
int exist(int matrix[][N], int elem)
{
int i, j;
int flag = 0;
for (i = 0; i < N; i++)
{
for (j = 0; j < N; j++)
{
if ((matrix[i][j]) == elem)
{
flag = 1;
break;
}
}
}
return flag;
}
【问题讨论】:
-
试试
for (j = 0; j < size; j++)-->for (j = 0; j < N; j++)。 -
当您初始化像
matrix_1[][N] = { 0 };这样的数组时,编译器不知道有多少行。请参阅this。编译器通过计算子数组的数量来确定数组的第一维。 -
您可以在没有使用显式指针声明语法声明的任何变量的情况下执行此操作,我猜这就是您所追求的,但您根本不使用指针就无法做到这一点。毕竟,索引运算符 (
[]) 是一个 pointer 运算符,并且您不能将数组作为函数参数接收,即使声明语法掩盖了这一点。 -
编译器确实知道有多少行,@QuaxtonHale。刚好足以容纳初始化程序的所有元素,即 1。这不是 OP 似乎想要的,但没有不确定性。
-
@JohnBollinger 是对的。我的意思是指出 OP 的意图。