IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C Discussion :

Message d'erreur bizarre à la compilation


Sujet :

C

  1. #1
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut Message d'erreur bizarre à la compilation
    Bonjour

    J'ai commencé un programme sensé générer un labrinthe aléatoirement. Pour faire simple, je stocke tout dans un tableau de dimension N*P, un mur étant représenté par un -1 et un espace par 0.
    la n° case du chemin allant du début à la fin a pour coordonnées {chx[n] , chy[n]}

    Quand je compile ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
     
    #include <stdio.h>
    #include <stdlib.h>
     
    /* Dimensions du labyrinthe */
    #define N 15
    #define P 45
    #define DIM N*P
     
    /* void d'affichage du labyrinthe */
    void disp(int grid[N][P])
    {
    	int i , j;
    	printf("\n");
    	for(i = 0 ; i < N ; i++)
    	{
    		for(j = 0 ; j < P ; j++)
    		{
    /* -1 = un mur, 0 = pas de mur */
     
    			printf("%d" , -grid[i][j]);
    		}
    		printf("\n");
    	}
    	printf("\n");
    }
     
    int main(int argc, char *argv[])
    {
    	int grid[N][P] , i = 0 , j = 0 , chx[DIM] , chy[DIM] , n = 0 , ch , dx[4] = {2,0,-2,0} , dy[4] = {0,-2,0,2} , x = 0 , y = 0;
    	srand(time(NULL));
    /* remplir le tableau grid de 0 et remplir le tour du tableau grid de -1 (= murs) */
    	for(i = 0 ; i < N ; i++)
    	{
    	for(j = 0 ; j < P ; j++)
    	{
    		if(i == 0 || j == 0 || i == N-1 || j == P-1)
    			grid[i][j] = -1;
    		else
    			grid[i][j] = 0;
    	}
    	}
    /* les listes chx et chy contiennent les coordonnées, dans l'ordre, des cases composant le chemin du début (en haut
     * à gauche) à la fin (en bas à droite) du labyrinthe */
    	chx[0] = 1;
    	chy[0] = 1;
    /*
    			    1
    			    ^
    déplacements :		2  < >  0
    			    v
    			    3
     
    n est le numéro de la case considérée dans le chemin allant du début à la fin de labyrinthe
    */
     
    /* construction du chemin à suivre pour aller du début à la fin */
    	while(chx[n] != N-2 && chy[n] != P-2)
    	{
    		x = chx[n];
    		y = chy[n];
    		n++;
    		ch = rand() % 4;
    		printf("choix : %d\n",ch);
    /* Conditions pour que le choix (aléatoire) de la direction à prendre pour la case suivante soit valide : */
    		while(x + dx[ch] < 1 
    			|| x + dx[ch] > P-2 
    			|| y + dy[ch] < 1 || y + dy > N-2 
    			|| (x == 1
    				 && dy[ch] == 1) 
    			|| (x == N-2
    				 && dy[ch] == 1) 
    			|| (y == 1
    				 && dx[ch] == -1) 
    			|| (y == P-2
    				 && dx[ch] == -1) 
    			|| grid[  y + dy[ch]  ][  x + dx[ch]  ] == -2)
    		{
    			ch = rand() % 4;
    			printf("choix : %d\n",ch);
    		}
    		chx[n] += dx[ch];
    		chy[n] += dy[ch];
    		grid[chy[n]][chx[n]] = -2;
    	}
    	for(i = 0 ; i < N ; i++)
    	{
     
    	}
    	return 0;
    }
    avec gcc (je suis sous Fedora 8 x86_64), j'obtiens ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    gene3.c: In function ‘main’:
    gene3.c:26: attention : implicit declaration of function ‘time’
    gene3.c:49: attention : comparaison entre un pointeur et un entier
    gene3.c:57: erreur: stray ‘\302’ in program
    gene3.c:57: erreur: stray ‘\240’ in program

  2. #2
    Membre averti

    Profil pro
    Inscrit en
    Avril 2004
    Messages
    346
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 346
    Points : 439
    Points
    439
    Par défaut
    Citation Envoyé par Alfred456654 Voir le message
    gene3.c: In function ‘main’:
    gene3.c:26: attention : implicit declaration of function ‘time’
    gene3.c:49: attention : comparaison entre un pointeur et un entier
    gene3.c:57: erreur: stray ‘\302’ in program
    gene3.c:57: erreur: stray ‘\240’ in program[/code]
    Tu dois définir le prototype de la fonction time avant de l'utiliser :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    y + dy[ch] < 1 || y + dy > N-2
    Tu fais une erreur de typage, en effet tu utilises dy[ch] (donc un élement du tableau) et dy (le tableau tel quel) après.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    grid[  y + dy[ch]  ][  x + dx[ch]  ]
    Pourquoi mettre de tels espaces ?

    J'ai juste fait de l'analyse syntaxique, je ne sais pas si ton code est correct.

    Quelques conseils pour une meilleure lisibilité :
    - La fonction main ne devrait qu'appeller les autres méthodes et ne pas faire de traitement directement.
    - Eviter les acrobaties pour écrire en moins de ligne possible, notamment pour la définition :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    int grid[N][P] , i = 0 , j = 0 , chx[DIM] , chy[DIM] , n = 0 , ch , dx[4] = {2,0,-2,0} , dy[4] = {0,-2,0,2} , x = 0 , y = 0;
    C'est difficilement lisible pour connaître le type d'une variable.

  3. #3
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Ah la bourde... je comprenais pas sa comparaison entre pointeur et entier...

    Sinon, j'ai bien inclus le time.h, je prends note de ce que tu m'as dit pour la la lisibilité du code, mais j'ai toujours le même message d'erreur dans mon terminal :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ gcc -o gene3 gene3.c
    gene3.c: In function ‘main’:
    gene3.c:77: erreur: stray ‘\302’ in program
    gene3.c:77: erreur: stray ‘\240’ in program

  4. #4
    Membre expérimenté
    Inscrit en
    Décembre 2004
    Messages
    1 478
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 1 478
    Points : 1 664
    Points
    1 664
    Par défaut
    Citation Envoyé par Alfred456654 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    $ gcc -o gene3 gene3.c
    gene3.c: In function ‘main’:
    gene3.c:77: erreur: stray ‘\302’ in program
    gene3.c:77: erreur: stray ‘\240’ in program
    Tu as des caracteres non-imprimables dans ton programme (sans doute une faute de frappe melangee a une touche etendue). Le plus simple est d'effacer la ligne 77 et de la re-ecrire, ou de bien configurer ton editeur de texte.

  5. #5
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    ligne 77 :
    J'ai utilisé chacun des caractères au moins une fois quelque part ailleurs, mais le message d'erreur ne s'affiche qu'ici... Qu'entends-tu par "configurer mon éditeur" (vim en l'occurence) ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    || grid[ y + dy[ch] ][ x + dx[ch] ] == -2)
    Merci

  6. #6
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Personne ne sait ?

  7. #7
    Futur Membre du Club
    Inscrit en
    Octobre 2007
    Messages
    18
    Détails du profil
    Informations forums :
    Inscription : Octobre 2007
    Messages : 18
    Points : 6
    Points
    6
    Par défaut
    Réglé.

  8. #8
    Membre à l'essai
    Profil pro
    Inscrit en
    Septembre 2009
    Messages
    20
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2009
    Messages : 20
    Points : 18
    Points
    18
    Par défaut
    Citation Envoyé par DaZumba Voir le message
    Tu as des caracteres non-imprimables dans ton programme (sans doute une faute de frappe melangee a une touche etendue). Le plus simple est d'effacer la ligne 77 et de la re-ecrire, ou de bien configurer ton editeur de texte.
    Moi aussi, j'ai eu cette mystérieuse erreur...
    j'ai simplement effacé la ligne et je l'ai réécrit lettre par lettre et l'erreur à disparu.
    Merci pour ce conseil .

  9. #9
    Membre confirmé

    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Février 2005
    Messages
    464
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    Localisation : France, Loire (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2005
    Messages : 464
    Points : 646
    Points
    646
    Par défaut
    Ton éditeur probablement utilise l'encodage utf8 et parfois ce caractère est inséré dans ton texte.
    La seule manière que j'ai trouvé pour le détecter (car la conversion de l'encodage ne suffit pas) est d'utiliser 'od -c fichier' :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     od -c test.c
    0000000   #   i   n   c   l   u   d   e       <   s   t   d   i   o   .
    0000020   h   >  \n   #   i   n   c   l   u   d   e       <   m   a   l
    0000040   l   o   c   .   h   >  \n  \n   i   n   t       m   a   i   n
    0000060       (   v   o   i   d   )  \n   {  \n  \t   t   y   p   e   d
    0000100   e   f       c   h   a   r       T   _   N   O   M   [   5   0
    0000120   ]       ;  \n  \t   T   _   N   O   M 240
    On voit dans le listing qu'a la suite de T_NOM*le caractère non imprimable 240 est inséré. Il m'a suffit de supprimer l'espace et de le remettre pour que tout rentre en ordre.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 2
    Dernier message: 01/02/2007, 18h37
  2. message d'erreur bizarre
    Par warubi dans le forum Dev-C++
    Réponses: 2
    Dernier message: 06/01/2007, 18h37
  3. Ecran bleu avec Messages d'erreur bizarres ?
    Par masta64 dans le forum Windows XP
    Réponses: 5
    Dernier message: 04/11/2006, 14h25
  4. Message d'erreur Bizarre
    Par ArHacKnIdE dans le forum Dépannage et Assistance
    Réponses: 5
    Dernier message: 10/07/2006, 22h33
  5. Réponses: 2
    Dernier message: 14/11/2005, 11h07

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo