【发布时间】:2011-08-31 21:12:33
【问题描述】:
我的程序有问题。我正在尝试通过一组指针运行。一旦找到正确的指针,程序将打印所有已访问的指针。我在以下位置收到错误消息:
void * temp=debut[k];
ajouter(temp[k], resultat);
它说“不应忽略的无效值”
我不明白为什么???
提前感谢您的帮助
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#include <time.h>
int calculerTaille(void * pointeur);
void ajouter(void * pointeur, char * resultat[]);
int verifier(void * debut, void * fin);
void * A[3];
void * D[3];
void * F[2];
void * G[4];
void * H[4];
void * J[3];
void * K[5];
void * L[4];
void * M[5];
int i = 0;
char * resultat[100];
int main(int argc, char * argv[]) {
A[0] = D;
A[1] = H;
A[2] = K;
D[0] = A;
D[1] = G;
D[2] = H;
F[0] = K;
F[1] = L;
G[0] = D;
G[1] = H;
G[2] = J;
G[3] = M;
H[0] = A;
H[1] = G;
H[2] = L;
H[3] = M;
J[0] = G;
J[1] = L;
J[2] = M;
K[0] = A;
K[1] = F;
K[2] = H;
K[3] = L;
K[4] = M;
L[0] = F;
L[1] = J;
L[2] = K;
L[3] = M;
M[0] = G;
M[1] = H;
M[2] = J;
M[3] = K;
M[4] = L;
void * debut = A;
void * fin = J;
ajouter(J, resultat);
while (verifier(debut, fin) != 1) {
srand(time(0));
int k = rand() % calculerTaille(K);
void * temp=debut[k]; //error
ajouter(temp[k], resultat); //error
}
int l=0;
for(l=0; resultat[l]!=NULL;l++) printf("%s ", resultat[l]);
return 0;
}
void ajouter(void * pointeur, char * resultat[]) {
if (pointeur == A)
resultat[i] = "A";
if (pointeur == D)
resultat[i] = "D";
if (pointeur == F)
resultat[i] = "F";
if (pointeur == G)
resultat[i] = "G";
if (pointeur == H)
resultat[i] = "H";
if (pointeur == J)
resultat[i] = "J";
if (pointeur == K)
resultat[i] = "K";
if (pointeur == L)
resultat[i] = "L";
if (pointeur == M)
resultat[i] = "M";
i++;
}
int verifier(void * debut, void * fin) {
if (debut == fin)
return 1;
else
return 0;
}
int calculerTaille(void * pointeur) {
if (pointeur == A)
return 3;
if (pointeur == D)
return 3;
if (pointeur == F)
return 2;
if (pointeur == G)
return 4;
if (pointeur == H)
return 4;
if (pointeur == J)
return 3;
if (pointeur == K)
return 5;
if (pointeur == L)
return 4;
if (pointeur == M)
return 5;
}
【问题讨论】:
-
你的程序结构很复杂,有很多
if语句等等。如果我的一个学生要编写这种代码,我会忽略他们的问题并要求他们清理代码或更好地表达他们的想法。通常,这无需任何进一步的工作就可以解决问题。 -
如果你正在学习编写代码,问题往往不是代码是否具有功能性,而是代码是否“漂亮”——一个清晰表达的想法通常很容易编码,而且很好代码通常是清晰表达的想法的产物。
-
您应该包含错误发生的行号,并提出一个更简单的示例来演示问题。