Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

echec de compilation avec fonction d'une instructio !!

14 réponses
Avatar
andre barbaroux
Bosoir à tous,
Débutant en C, jeunot de 84 ans, je réussis à ne pas compiler une fonction
de une instruction, j'utilise le compilateur C (GNU) de codeblocks, ce Sp
est destiné à imprimer un tableau ligne à ligne . Le precompilateur
m'indique toujours:
line 25 error expected ')' 'before' '[' token Qur je ne comprend pas?
cette ligne est la declaration de la fonction
C'est pourquoi j'ai mis en commentaire toute la fonction et la même erreur
toujours.

Merci de regarder ;-)



int main()
{
int ligne;
int col;
ligne=2;
col=3;
int tableau[ligne][col];

tableau[0][0]=1;
tableau[0][1]=2;
tableau[0][2]=3;
tableau[1][0]=4;
tableau[1][1]=5;
tableau[1][2]=6;

imp_tablo(ligne,col,tableau[ligne][col]); // appel sous-programme
}

/* Ceci est un sous-programme d'impression ligne à ligne d'un tableau.
Auquel on passe en parametre
le nom du tableau, le nombre de lignes, et de colonnesl*/

ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])

{
printf("%d",nbligne);
}

4 réponses

1 2
Avatar
Samuel DEVULDER
Le 22/07/2014 18:48, andre barbaroux a écrit :

line 25 error expected ')' 'before' '[' token Qur je ne comprend pas?
cette ligne est la declaration de la fonction

ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])



Ici, il manque le type de nbligne, nbcol, et tablo. Essaye avec la
déclaration suivante en ligne 25:

int imp_tablo(int n, int m, int tablo[2][3]);

(note les constantes dans la déclaration du paramètre de type tableau.
Pour faire plus propre il faudrait utiliser des #define)

Ensuite pour l'appel dans le main(), il te suffit d'utiliser tout
simplement:

imp_tableau(ligne, col, tableau); // appel au sous-programme

Ca devrait mieux marcher je pense.

sam.
Avatar
Lucas Levrel
Bonjour,

Le 23 juillet 2014, andre barbaroux a écrit :
Je veux depuis le main passer passer le bombre de lignes , de colonne et
le nom du tableau, avec ou sans les crochets indiquant les tableau multi
dimensionnel



Dans la fonction imp_tablo, veux-tu imprimer tout le tableau, ou seulement
une cellule ? Note que la déclaration
int tableau[8][8];
signifie « tableau est une table de 8×8 entiers », mais dans le reste du
code,
tableau[x][y]
désigne la case (x,y) du tableau, un entier donc. Si tu passes ça à une
fonction, il faut que la fonction prenne un entier (et non un
tableau) comme argument.

J'ai ecrit un petit programme qui marche trés bien et qui montre le
global, l'appel de fonction.
#include <stdio.h>
#include <stdlib.h>
int short tableau[8][8];
int toto;

// programme principal

int main()
{
// sous-programme

tableau[0][0]=9;
imp_tablo(toto);
return 0;
}
// sous programme

imp_tablo(tata)
{

printf("%d",tata);
printf("%d",toto);
printf("%d",tableau[0][0]);
toto=3;

}



Je ne comprens pas trop où tu veux en venir dans ce programme : à quoi
sert de passer toto en argument puisqu'il est global ?


--
LL
Ἕν οἶδα ὅτι οὐδὲν οἶδα (Σωκράτης)
Avatar
andre barbaroux
Bon jour ça marche!! merci
Je n'ai pas vu le lien entre la modif et le message sybillin du compilateur
marquant: la déclarationen erreur.

error expected ')' 'before' '[' token
Voila mon pg adhoc:
Remarques:
Il n'y a pas de controle ni à la compilation ni a l'execution des limites du
tableau, sauf à se le programmer,. le "printf("%d", tablo[5][5]:;" imprime
n'importe quoi mais aucune alerte.
.......................................................................................................

#include <stdio.h>
#include <stdlib.h>

int main()
{
int ligne=2;
int col=3;;
int tableau[ligne][col];
tableau[0][0]=1; tableau[0][1]=2;tableau[0][2]=3;
tableau[1][0]=4;tableau[1][1]=5;tableau[1][2]=6;
imp_tablo(ligne, col, tableau); // appel au sous-programme
}
//...............SSous_programme...........
int imp_tablo(int n, int m, int tablo[n][m]) //declaration fonction
{
printf("%d",tablo[1][1]);
}


"Samuel DEVULDER" <samuel-dot-devulder-at-laposte-dot-net> a écrit dans le
message de news: 53d01315$0$2039$
Le 22/07/2014 18:48, andre barbaroux a écrit :

line 25 error expected ')' 'before' '[' token Qur je ne comprend pas?
cette ligne est la declaration de la fonction

ligne 25: int imp_tablo(nbligne,nbcol,tablo[nbligne][nbcol])



Ici, il manque le type de nbligne, nbcol, et tablo. Essaye avec la
déclaration suivante en ligne 25:

int imp_tablo(int n, int m, int tablo[2][3]);

(note les constantes dans la déclaration du paramètre de type tableau.
Pour faire plus propre il faudrait utiliser des #define)

Ensuite pour l'appel dans le main(), il te suffit d'utiliser tout
simplement:

imp_tableau(ligne, col, tableau); // appel au sous-programme

Ca devrait mieux marcher je pense.

sam.
Avatar
andre barbaroux
Bonjour Lucas et merci
Tu m'écris:
"Je ne comprens pas trop où tu veux en venir dans ce programme : à quoi
sert de passer toto en argument puisqu'il est global ?"
et tu as tout à fait raison.En fait j'ai écris cela pour une formation de
base à mon petit fils pour lui expliquer, de vive voix' les variables
globales,et les paramètres à passer aux SP.
Tout a fait d'accord que tablo étant en global il n'y a pas à le passer en
argument!En fait si je l'ai envoyé, -pour ce qui me concerne- c'est que je
ne vois pas de difference de déclaration de fonction, et d'appel avec mon
programme incriminé et je n'ai pas eu d'erreur de compil.
Ceci est dépassé puisque grace à tous vos conseils j'ai posté à l'attention
de Samuel et à tous le code qui fonctionne. La suite du code pour imprimer
tout tableau en ligne et en colonne, (deux "for imbriqués") ne m'a pas posé
de problèmes tant que ce code était dans le "Main" et donc sans les
problèmes que j'ai eu en voulant le mettre en "fonction"


"Lucas Levrel" a écrit dans le message de news:

Bonjour,

Le 23 juillet 2014, andre barbaroux a écrit :
Je veux depuis le main passer passer le bombre de lignes , de colonne
et
le nom du tableau, avec ou sans les crochets indiquant les tableau multi
dimensionnel



Dans la fonction imp_tablo, veux-tu imprimer tout le tableau, ou seulement
une cellule ? Note que la déclaration
int tableau[8][8];
signifie « tableau est une table de 8×8 entiers », mais dans le reste du
code,
tableau[x][y]
désigne la case (x,y) du tableau, un entier donc. Si tu passes ça à une
fonction, il faut que la fonction prenne un entier (et non un tableau)
comme argument.

J'ai ecrit un petit programme qui marche trés bien et qui montre le
global, l'appel de fonction.
#include <stdio.h>
#include <stdlib.h>
int short tableau[8][8];
int toto;

// programme principal

int main()
{
// sous-programme

tableau[0][0]=9;
imp_tablo(toto);
return 0;
}
// sous programme

imp_tablo(tata)
{

printf("%d",tata);
printf("%d",toto);
printf("%d",tableau[0][0]);
toto=3;

}



Je ne comprens pas trop où tu veux en venir dans ce programme : à quoi
sert de passer toto en argument puisqu'il est global ?


--
LL
?? ???? ??? ????? ???? (????????)
1 2