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

  1. jisisv Messages postés 3678 Statut Modérateur 936
     
    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
  2. 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
    1. jisisv Messages postés 3678 Statut Modérateur 936
       
      Effectivement
      johand@osiris:~/src/ccm$ gcc -Wall ana.c ;echo $? 
      0

      Peux-tu reproduire le bug ?

      Johan
      0