Erreur lors de l'éxecution

tessa90 Messages postés 4 Statut Membre -  
jisisv Messages postés 3678 Statut Modérateur -
Bonsoir,

Je dois faire un jeu d'anagramme en langage C (retrouver à partir d'un mot mélangé le mot initial) et dans ma fonction chargée de mélanger les lettres, il y a un problème. Tout marchait parfaitement la semaine dernière (compilation+exécution du programme) et là dernier test avant d'envoyer le fichier (inchangé depuis la semaine dernière): erreur de syntaxe par rapport à la première ligne (première fois qu'on me signale cette erreur!). Alors même après avoir redémarrer le pc, et cherché l'erreur je ne comprends toujours pas !
Voilà le code de ma fonction (l'erreur porterait donc sur la ligne en gras:

void melanger (char * mot){
int longueur_mot=0,longueur_temp=0, c=0;
char* temp=NULL;
char car_hasard;
longueur_mot=strlen(mot);
longueur_temp=longueur_mot;
temp=malloc(longueur_temp*sizeof(char));
strcpy(temp,mot);
srand((unsigned int) time(NULL));
while(longueur_temp!=0){
c=rand()%(longueur_temp);
car_hasard=temp[c];
temp[c]=temp[longueur_temp-1];
temp[longueur_temp-1]='\0';
longueur_temp=strlen(temp);
printf("%c", car_hasard);
}
printf("\n");
}

Si quelqu'un pouvait m'aider... A noter que le code compile toujours parfaitement et que l'erreur :
./bon_tp.c: line 6: Erreur de syntaxe près du symbole inattendu « ( »
./bon_tp.c: line 6: 'void melanger (char * mot){'

n'apparaît que lors de l'exécution du problème ! Help !

2 réponses

jisisv Messages postés 3678 Statut Modérateur 935
 
C'est à la compilation qu'apparaît l'erreurn je présume !
J'ai repris ton code avec les fichiers en-tête adéquats:
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <time.h>
et cela compile sans problème sous gcc.

Si ta fonction se trouve dans un plus gros fichier l'erreur se trouve vraissemblablement en-deçà du code exposé.

Johan
Gates gave ^H sold you the windows.
GNU gave us the whole house.(Alexandrin)
0
tessa90 Messages postés 4 Statut Membre
 
Non je compile avec Emacs (gcc ...) et ça marche ! L'erreur apparaît lors de l'éxecution et elle n'apparaissait pas la semaine dernière (alors que je n'ai pas touché à mon code depuis).

Voilà le code en entier si jamais tu arrives à trouver la fameuse erreur:

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

void melanger (char * mot){
int longueur_mot=0,longueur_temp=0, c=0;
char* temp=NULL;
char car_hasard;
longueur_mot=strlen(mot);
longueur_temp=longueur_mot;
temp=malloc(longueur_temp*sizeof(char));
strcpy(temp,mot);
srand((unsigned int) time(NULL));
while(longueur_temp!=0){
c=rand()%(longueur_temp);
car_hasard=temp[c];
temp[c]=temp[longueur_temp-1];
temp[longueur_temp-1]='\0';
longueur_temp=strlen(temp);
printf("%c", car_hasard);
}
printf("\n");
}

char * un_mot(){
char * dico[5];
char * mot = NULL;
int position;
srand((unsigned int) time(NULL));
dico[0]="bonjour";
dico[1]="lapin";
dico[2]="collier";
dico[3]="maison";
dico[4]="soleil";
position=rand()%5;
mot=dico[position];
return mot;
}

int main(){
char* mot=NULL;
char reponse_donnee[30];
mot=un_mot();
printf("%s\n",mot);
printf("Le mot mélangé est : \n");
melanger(mot);
printf("Quelle est votre réponse ? \n");
scanf("%29s",reponse_donnee);
printf("Votre réponse est : %s \n",reponse_donnee);
printf("La bonne réponse est : %s \n",mot);
if(strcmp(reponse_donnee,mot)!=0)
printf("Vous avez perdu ! \n");
else
printf("Bravo, vous avez gagné ! \n");
return 0;
}
0
jisisv Messages postés 3678 Statut Modérateur 935
 
Effectivement
johand@osiris:~/src/ccm$ gcc -Wall ana.c ;echo $? 
0

Peux-tu reproduire le bug ?

Johan
0