我是C的初学者,我不明白为什么当我运行下面的代码时
#include <stdio.h>
#include <stdlib.h>
#define DIMMAX 5
#define MAXSTRINGA 20
typedef struct{
int num;
int den;
} Razionale;
typedef Razionale Matrice[DIMMAX][DIMMAX];
void aquisisciRazionale(Razionale);
void acquisisciMatrice(Matrice[DIMMAX][DIMMAX]);
void aquisisciRazionale(Razionale n){
printf("Inserire numeratore: ");
scanf("%d", &n.num);
printf("Inserire denominatore: ");
scanf("%d", &n.den);
}
void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){
int i, j;
for(i=0; i<DIMMAX; i++){
for(j=0; j<DIMMAX; j++){
aquisisciRazionale(mat[i][j]);
}
}
}
int main(int argc, char *argv[]) {
Matrice m[DIMMAX][DIMMAX];
acquisisciMatrice(m);
}
我有这个错误:
[错误]'aquisisciRazionale'的参数1的不兼容类型
[注意]预期'Razionale'但参数类型为'struct Razionale(*)[5]'
我不明白定义结构或定义函数时是否有错误。有人能帮助我吗?
答案 0 :(得分:2)
Matrice
typedef已经是一个二维数组。声明函数时
void acquisisciMatrice(Matrice mat[DIMMAX][DIMMAX]){
您说mat
是Matrice
的二维数组,是Razionale
的四维数组。 mat[i][j]
是Matrice
,而不是Razionale
。
该功能应该是
void acquisisciMatrice(Matrice mat){
因为维度是Matrice
typedef的一部分。您还应该更改main()
中的变量:
Matrice m;
acquisisciMatrice(m);
请注意,acquisisciRazionale()
不会填写acquisisciMatrice()
中的矩阵元素。当你打电话
acquisisciRazionale(mat[i][j]);
您正在传递数组元素的副本。然后scanf()
写入该副本,这对原始数组没有影响。你应该传递一个指针。
acquisisciRazionale(&mat[i][j]);
并将功能更改为:
void aquisisciRazionale(Razionale *n){
printf("Inserire numeratore: ");
scanf("%d", &(n->num));
printf("Inserire denominatore: ");
scanf("%d", &(n->den));
}