Aller au contenu

[ C ] Pointeurs de tableaux à 3 dimensions


Jericho

Messages recommandés

Bonjour,

Voilà, pour mes cours, j'ai des dossiers à rendre et la, c'est la première fois que je bloque complètement. Je dois faire un programme qui saisit des noms d'élèves, des cours et des côtes et les affiche. Assez simple en soi mais après je dois pouvoir l'intégrer dans une fonction pour pouvoir ensuite continuer (affichage d'un seul cours, un seul élève, ...).

Seulement, j'ai un soucis avec mes pointeurs de tableaux à 3 dimensions.

Lorsque je compile, je n'ai aucune erreur mais c'est lors du Link, qu'il me met :

Dossier 3.obj : error LNK2001: unresolved external symbol "void __cdecl saisie(char *,char *,float *)" (?saisie@@YAXPAD0PAM@Z)

Je ne comprends vraiment pas :?

Voici mon code :

#include

#include

#include

void saisie (char *, char *, float *);

int main (void)

{

char nom[10][20];

char cours[10][20];

float cotes[10][10];

saisie(&nom[10][20],&cours[10][20],&cotes[10][10]);

return 0;

}

void saisie (char *nom[10][20], char *cours[10][20], float *cotes[10][10])

{

int i,j,k,e,f,lignes;

float cotebuff;

//Saisie du nombre d'élèves et de cours

printf("Entrer le nombre d'eleves :");

scanf("%d", &e);

printf("Entrer le nombre de cours :");

scanf("%d", &f);

//Saisie des noms

fflush(stdin);

for (i=0; i

{

printf("Entrer le nom de l'eleve %d :", i);

for (j=0;j<19;j++)

{

*nom[j]=getch();

printf("%c", *nom[j]);

if(*nom[j]=='

')

{

j=20;

}

}

printf("

");

}

//Saisie des cours

system("cls");

fflush(stdin);

for(i=0;i

{

printf("Entrer le nom du cours %d :", i);

for (j=0;j<19;j++)

{

*cours[j]=getch();

printf("%c", *cours[j]);

if(*cours[j]=='

')

{

j=20;

}

}

printf("

");

}

//Saisie des côtes

system("cls");

for (j=0 ;j

{

for(i=0; i

{

printf("

Entrer la cote de ");

for(k=0;k<19 && *nom[j][k]!='

';k++)

{

printf("%c", *nom[j][k]);

}

printf(" pour le cours de ");

for(k=0;k<19 && *cours[k]!='

';k++)

{

printf("%c", *cours[k]);

}

printf(" : ");

scanf("%f", &cotebuff);

*cotes[j]=cotebuff;

}

}

//Affichage

system("cls");

printf("Tableau des eleves

");

printf("__________________

");

//Cours

for(i=0;i

{

for (j=0;j<3 && *cours[j]!='

';j++)

{

printf("%c", *cours[j]);

if(*cours[j]=='

')

{

j=20;

}

}

printf(" ");

}

lignes = 0;

printf("

");

while(lignes

{

printf("--- ");

lignes++;

}

//Eleves

for (i=0;i

{

printf("

");

for(k=0;k

{

printf("%.1f", *cotes[k]);

printf(" ");

}

for (j=0;j<19;j++)

{

printf("%c", *nom[j]);

if(*nom[j]=='

')

{

j=20;

}

}

}

printf("

a");

}

Si quelqu'un sait m'expliquer ce que j'ai fait de travers (ou pas fait), ce serait vraiment aimable!

Merci d'avance :)

Edit : J'ai dû mettre mon code en Quote et non Code sinon il supprimait tous mes

,

/n
... :? (qui ne passent pas sans balises de quote en fait).
Lien à poster

void saisie (char *, char *, float *);

et

void saisie (char *nom[10][20], char *cours[10][20], float *cotes[10][10])

ne sont pas exactement les meme lignes. Essaye de changer la premiere par la 2eme et recompile. Ta déclaration de prototype n'est pas correcte au vue de la fonction saisie. Corrige dont la liste de paramètre.

Sinon, je ne vois pas de 3eme dimensions

Lien à poster

Oops 2 dimensions, pardon :huh:

Voilà, j'ai changé mon prototype et mon "en-tête" en :

void saisie (char (*nom)[10][20], char (*cours)[10][20], float (*cotes)[10][10]);

et le link fonctionne!

Merci pour ta réponse :chinois:

Maintenant, il s'arrete durant la saisie :oups: Je vais un peu revoir ca :saoul:

Edit : C'est très étrange ce problème... Qu'il soit dans n'importe quelle boucle, à partir d'un certain nombre (pas tjrs le même) de caractères, il sort de la fonction et m'affiche donc "Press any key to continue".

J'ai déplacé les deux fflush(stdin); à l'intérieur de la boucle principale de saisie du prénom ET du cours et rien n'y fait? Ce serait quoi? Un dépassement du buffer?

Lien à poster

M'enfin, le but est-il d'enregistrer pour chaque eleve, la liste des cours et des notes associée ? Si oui, tu t'y prends assez mal. C'est possible avec des tableau, mais il faut travailler un peu plus savament sur les indices.

je pense que tu as mal analysé le probleme et qu'il faut tout reprendre, parce qu'apres avoir un peu lu plus en detail ton code, je ne vois nullement a quoi il peut aboutir

Lien à poster

Et bien malheureusement, ce n'est pas moi qui décide comment coder ce programme. J'ai des consignes à suivre :

Ecrire un programme qui permet de créer trois tableaux :

- Le nom des élèves sera entré dans une matrice de 10 sur 20 éléments.

- le nom des cours sera entré dans une seconde matrice de 10 sur 20 éléments.

- Les côtes dans une matrice de 10 sur 10 élements.

... ... ...

Je suis donc obligé de procéder de cette façon et j'avoue que ca ne me réjouit pas mais je n'ai pas le choix.

Lien à poster

Oui, les côtes... les notations :) 10/20 , 19/20 , ...

Donc si on a un élève A et un élève B, un cours de math et un cours d'anglais; ca doit donner ca :

    Math   Anglais
A     9        12
B     18       17

(les ennoncés de mon prof ne sont jamais très très clairs :) )

Edit : Ca fonctionnait très bien sans fonction (j'ai commencé en mettant tout dans le main) mais pour la suite, il vaut mieux utiliser des fonctions.

Lien à poster

ok je comprend mieux,

je ferais un truc du genre

/* Init des cours */

for(i=0;i<10;i++)

{

scanf("%s", cours);

}

/* Init des noms des elevers */

for(i=0;i<10;i++)

{

scanf("%s", nom);

}

/* Remplissage des notes par matiere et eleve */

for(i=0;i<10;i++)

{

printf("Remplissage de la matiere %s", cours);

for(j=0;j<10;j++)

{

printf("Note pour l'eleve %s:", nom[j]);

scanf("%f", cotes[j]);

}

}

Lien à poster

bjr

quand on passe un tableau en paramêtre ds une fonction

(on donne son d'addresse et pas une copie du tableau )

d'ou

une declaration:

void saisie (char nom[10][20], char cours[10][20], float cotes[10][10])

ou

void saisie (char *nom[10], char *cours[10], float *cotes[10])

( la deuxieme declaration sert pour des tableaux de taille on fixe )

quand tu appele la fonction

saisie(nom,cours,cotes);

Lien à poster
  • 3 semaines après...
×
×
  • Créer...