【发布时间】:2017-05-19 15:23:04
【问题描述】:
我正在尝试编写一个程序来分析用户提供的 (3 x 4) 字符串矩阵。最终,它需要输出矩阵中存在的最长字符串以及该字符串的长度。
我的程序似乎正确地读取了输入,因为它成功地回显了输入字符串,但它没有正确输出最长的单词。当我传递最长单词的值时,我确定我犯了某种与指针相关的错误,但我不知道如何解决它。
这是我的代码:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define M 4
#define N 5
#define MAX_DIM 20
void findMAX(char matrice[N][M][MAX_DIM]) {
char maxr;
int index;
int i, j, it;
index = 0;
maxr = *(*(*(matrice+0)+0)+MAX_DIM);
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
if (index < strlen(matrice[i][j])) {
index = strlen(matrice[i][j]);
// I save the longer line's value
it = i;
// I save the maximum's value
maxr = *(*(*(matrice+i)+j)+MAX_DIM);
}
}
}
printf ("The MAX is: -/%s/- and it's long: -/%d/- \n", maxr, index);
printf ("It is content in the: %d line, which is: \n", it);
for (j = 0; j < N-1; j++) {
printf("%s ", matrice[it][j]);
}
}
void leggi(char matrice[N][M][MAX_DIM]) {
int i, j;
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
printf ("Insert the element matrix [%d][%d]: ", i, j);
scanf ("%s", matrice[i][j]);
fflush(stdin);
}
}
}
void stampa(char matrice[N][M][MAX_DIM]) {
int i, j;
printf("\n(4 x 3) MATRIX\n");
for (i = 0; i < N-1; i++) {
for (j = 0; j < M-1; j++) {
printf("%s ", matrice[i][j]);
}
printf("\n\n");
}
}
int main(int argc, char *argv[]) {
char matrix[N][M][MAX_DIM]; //Matrix of N*M strings, which are long MAX_DIM
printf("************************************************\n");
printf("** FIND THE LINE WITH THE MAXIMUM ELEMENT **\n");
printf("** IN A (4 x 3) MATRIX **\n");
printf("************************************************\n");
printf ("Matrix Reading & Printing\n");
leggi (matrix);
stampa (matrix);
findMAX(matrix);
return 0;
}
【问题讨论】:
-
C 不支持传递引用从不。
-
首先,您似乎错过了 C 没有通过引用传递。所有函数参数都按值传递。这些可能包括指针,但通过值传递指向事物的指针与通过引用传递事物本身不同。
-
@JohnBollinger 对不起,我的错误。谢谢你的解释。
-
问题是您可能在某处反转了您的尺寸。
Also: warning: format ‘%s’ expects argument of type ‘char *’, but argument 2 has type ‘int’ [-Wformat=]printf ("The MAX is: -/%s/- and it's long: -/%d/- \n", maxr, index); -
在所有
for循环中,您已经反转维度,最后一项应该是matrice[N - 1][M - 1],但您正试图访问matrice[M - 1][N - 1]之类的东西.
标签: c string multidimensional-array