Partage
  • Partager sur Facebook
  • Partager sur Twitter

Problème de variables

Programme fonctionne pas

Sujet résolu
24 février 2006 à 17:00:46

Bonjour ,

Merci de lire ce post pour essayer de m'aider :)

Je prend des cours ( sur le Site Du Zér0 ) de C et j'ai surement oublié une petite chose ( enfin je l'espère :D )


Je suis sous WINDOWS XP et j'utilise Dev-Cpp


Voici mon problème :(

Je voudrais faire un programme qui traduit des verbes latin ( oui oui vous avez bien entendu ! :lol: )

Mais le
if(principale == "h1")
     {
             system("CLS");     
             printf("\t\n\n BIENVEU DANS L' AIDE \n\n\n\n");     
     }


même si j'entre "h1" la console n'affiche pas l'aide o_O


La fonction

void off ()
  {
   system("CLS");     
   printf("\n\n Le mot que vous avez entre est introuvable \n\n");
   printf(" Le programme va s'arreter \n\n\n\n\n");
   system("PAUSE");     
  }



sera dévelopée plus tard
et l'aide sera aussi développée plus tard ^^





Mon fichier "main.c" :


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



int main(int argc, char *argv[])
  {
 
  char principale [31] ;
  printf("\n\n\t -_-_-_-_- BIENVENU DANS LATIN+ -_-_-_-_- \n\n\n\n\n");
  printf("\tEntrez le mot a chercher ou tapez 'h1' pour avoir de l'aide \n\n\n\n");
  scanf("%s",principale);
  printf("\n\n\n");
  if(principale == "h1")
     {
             system("CLS");     
             printf("\t\n\n BIENVEU DANS L' AIDE \n\n\n\n");     
     }
  system("PAUSE");     
  return 0;
  }



void off ()
  {
   system("CLS");     
   printf("\n\n Le mot que vous avez rentre est introuvable \n\n");
   printf(" Le programme va s'arreter \n\n\n\n\n");
   system("PAUSE");     
  }





et mon fichier "Prottotype.h" :

Le #ifndef verif , est un truc de M@teo pour ne pas inclure par erreur 2 fois le même fichier



// Prottotypes et DEFINE



#ifndef verif
#define verif


void off();


#endif


Et y a t-il une autre fonction ou autre chose pour remplacer les



if (principale == LeMotLatin )
{
 printf("LeMotLatin est à l'ind. présent ça veut dire TRADUCTION ... ");
}



Parceque avec cette technique je suis parti pour en mettre des milliers des
"If ..." :lol:




Merci d'avance



PianoPâriss





Secret (cliquez pour afficher)
Le Site Du Zér0 est génial !!! :)

  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 17:50:54

Dans:

scanf("%s",principale);


Tu as oublié le "&" ;)
Change cette ligne par cela:

scanf("%s", &principale);


Ca devrait marcher ^^
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 18:08:13

Merci de ta réponse ( très rapide ) Amadeus :) :

Mais apparament ça fonctionne toujour pas :(

Je vais réessayer avec le "&"
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 18:17:47

Grrrr...écoute pas c'qu'il dit lol! Une chaine de caracteres est un pointeur, il ne faut PAS mettre de "&". Je dirais plutôt qu'on ne peut pas mettre "if (maChaine == "truc")", donc moi je passe par strcmp, comme ça : "if (strcmp (maChaine, "truc") == 0)".
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 18:19:41

Citation : Piano

Merci de lie ce tuto. pour essayer de m'aider :)



ce tuto? o_O ce post plutot non?

et la reponse d'azerty est la bonne mais je me suis fait griller pour le dire :p
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
24 février 2006 à 18:59:31

if(principale == "h1")
Pas bon : pour comparer des chaînes, il faut utiliser strcmp.

Et sinon après tu peux peut être déclarer un tableau constant qui contient tous les mots latins et leur traduction puis boucler et faire des strcmp. Ou créer un fichier "dictionnaire" qui contiendrait tous les mots mais comme ça serait un .txt tu pourrais en rajouter facilement.

Au fait tu penses pas qu'un traducteur anglais serait plus facile ^^ j'ai eu en dernière heure de la semaine un cours de latin, dur dur :D rien qu'analyser le verde à partir de modèles de conjugaisons ou déclinaisons, tu en as pour des années de boulot :D fin bon là tu fais sans doute un truc plus simple ;)
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 19:12:33

Merci Beaucoup pour les réponses :)

J'avais oublié strcmp :p

( J'ai changé tuto. en post )

et , si je veux faire un .txt je les mettrais comment les traductions des mots

"Amo = j'aime ind. présent 1PS. V.A." par exemple ? et même si j'ai pas encore lu le Chap. sur les fichiers
(Je le commence ) comment je fait pour qu'il reconnaisse la traduction et le mot ? o_O

Je compte pas faire TOUS les mots Latin juste ceux que j'ai à connaitre cette année ou les verbes de base à tous les temps ; un truc pas trop complex :lol:

Et un dernier petit truc , je sais que ça fait beaucoup mais bon ;

Je sais plus comment faire par exemple si le mot est faut ==> Va vers la fonction " void off () " OU:
Si principale == h1 ==> Va vers la fonction " long aide(int aidef) " ;
je suppose qu'il y a aussi strcmp la dessous :lol:


Oui je sais je suis débutant :p


Je me disait aussi que le "&" était un peu bizzar mais j'ai quand même essayé :p !


PianoPâriss
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 19:50:23



if(strcmp(princpal,"h1")==0)
{
aide(aidef); // je sais pas c'est quoi ton "aidef"
}

if (strcmp(chaine,"bonne_reponse")!=0)
{
off();
}
else
{ printf("bravo tu as bon");
}


Si j'ai bien compris ta question alors c'est aussi simple que ca.
  • Partager sur Facebook
  • Partager sur Twitter
24 février 2006 à 20:52:35

Rebonjour ; ( Bonsoir )

"aidef" c'était une variable ; mais j'ai changé la fonction en " void aide() "
Je sais ça manque de commentaires . ^^

Ca fonctionne le

if(strcmp(princpal,"h1")==0)
{
aide(aidef); // je sais pas c'est quoi ton "aidef"
}

if (strcmp(chaine,"bonne_reponse")!=0)
{
off();
}
else
{ printf("bravo tu as bon");
}


Même si je comprend pas trop pourquoi tu as mis : "Bonne_réponse" et "Bravo tu as bon" c'est pas grave , ça fonctionne :D

Est ce que quelqu'un sait comment faire avec un .txt externe pour que le programme comprenne que ça c'est la traduction et que ça c'est le mot en question ?

Merci pour toutes les réponses déja données . :)
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
24 février 2006 à 21:43:49

Tu vas sans doute devoir faire une lecture formattée. Par exemple dans ton fichier tu écris
amo aimer
venio venir
lego lire


Et après tu les lis avec un scanf :
char mot_latin[50];
char mot_francais[50];
fscanf (fichier, "%s %s", mot_latin, mot_francais);

Et ensuite tu fais les comparaisons qu'il faut, tes mos sont placés dans ta variable. Puis comme la lecture est formattée, tu peux ajouter d'autres informations aussi (inconvénient : un "mot" ne doit pas contenit d'espaces sinon fscanf considère qu'il y a deux mots). Puis tu peux créer un petit programme interactif qui écrit dans le fichier, ou le tri de temps en temps, enfin, tu as du boulot :D
  • Partager sur Facebook
  • Partager sur Twitter
25 février 2006 à 11:18:36

Merci beaucoup des réponses ;

J'ai du boulot , comme tu dis :p

Je crois que je vais juste écrire les mots à connaître cette anée ; ce sera suffisant :lol:

Et 'mot_latin' contient quoi ? juste le premier mot du texte, elle ne sait pas contenir tous les mots du texte ?! o_O

Et pour les comparaisons je devrais aussi mettre des centaines de fois ??? o_O

if (strcmp (principale, "amo") == 0)
    {
    } 

Je suis pas super doué :p !
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
25 février 2006 à 11:46:52

Dans le code que j'ai donné, grâce au code de format de fscanf, tu auras normalement (si le fichier est bien écrit), le mot en latin dans mot_latin et le mot en français dans mot_francais.

Après, l'avantage du fichier et qu'il est extensible donc tu ne mets pas des milliers de strcmp mais une boucle, en fait dans la boucle, tu lis un nouveau mot en latin et en français, tu compares le mot latin au mot entré par l'utilisateur, puis si il est bon tu affiches le mot francais, sinon tu reboucles et relis le fichier, ça donne un code du genre :
char mot_latin[50];
char mot_francais[50];
while (feof (fichier))
{
    fscanf (fichier, "%s %s", mot_latin, mot_francais);
    if (strcmp (mot_latin, mot_entre) == 0)
    {
        printf ("Traduction de %s : %s\n", mot_lain, mot_francais);
        break;
    }
}

fichier est un FILE*, mot_entre est le mot entré par l'utilisateur. J'ai utilisé une boucle qui s'arrête soit quand elle touche la fin du fichier (mais je suis pas sûr que cette méthode soit bonne), ou quand on trouve le bon mot.
  • Partager sur Facebook
  • Partager sur Twitter
25 février 2006 à 13:14:26

Merci de ta réponse "louisclem"

ça fonctionne ton

char mot_latin[50];
char mot_francais[50];
while (feof (fichier))
{
    fscanf (fichier, "%s %s", mot_latin, mot_francais);
    if (strcmp (mot_latin, mot_entre) == 0)
    {
        printf ("Traduction de %s : %s\n", mot_lain, mot_francais);
        break;
    }
}



Mais j'ai du changer le "feof"

while (feof (fichier))



en eof
while (eof (fichier))


Merci beaucoup mon programme fonctionne ; il me reste plus qu'à faire le dico. :p
(Ce ne sera pas de tout repos ! :lol: )



PianoPâriss
  • Partager sur Facebook
  • Partager sur Twitter
26 février 2006 à 11:57:44

Rebonjour

J'ai un dernier petit problème :honte::lol: :

Je n'arrive pas à "gérer" l'erreur, que, si le mot n'est pas dans le dictionnaire ,
il affiche : "le mot recherché n'est pas dans le dico."

j'ai essayé avec un 'else' mais il n'y a pas de 'if'.

Je vous rappele la partie du code concernée :

while (eof (fichier))
{
    fscanf (fichier, "%s %s",mot_latin ,mot_francais);
    if (strcmp (mot_latin, principale) == 0)
    {
        printf("Traduction de %s : %s\n\n\n\n\n\n", mot_latin, mot_francais);
        break;
    }
}   
               
     fclose(fichier);
    }
    else
    {
        printf("\n\nImpossible d'ouvrir le fichier dico.txt\n\n\n\n");
    }
     
  printf("\nAu revoir");       
  system("PAUSE>NUL")
  return 0;
  }
 


"Principale" est la varible qui contient le mot entré ( recherché );

Il y a un "else" parceque , au début du programme il y a :

  FILE* fichier = NULL;
  fichier = fopen("dico.txt", "r+");
   
     if (fichier != NULL)
    {
 



Merci d'avance des nouvelles réponses .
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 février 2006 à 12:13:28

Tu vas devoir utiliser une variable qui indique si le mot a été trouvé ou pas.

int trouve = 0; et dans le if, si on a trouvé le bon mot, on met cette variable à 1, sinon on y touche aps (elle reste à 0). A la fin de la boucle il suffit de regarder cette valeur. 1 : on a trouvé, 0 : toujours pas trouvé.
  • Partager sur Facebook
  • Partager sur Twitter
26 février 2006 à 12:28:48

Merci de m'avoir répondu aussi vite, louisclem ;

Euh , j'ai pas compris , ou je mets la variable "trouve" dans la boucle ? o_O

j'ai mis :

  int trouve = 0;


et puis :

while (eof (fichier))
{
    fscanf (fichier, "%s %s",mot_latin ,mot_francais);
    if (strcmp (mot_latin, principale) == 0)
    {
     printf("Traduction de %s : %s\n\n\n\n\n\n", mot_latin, mot_francais);
     trouve = 1;
     break;
    }
} 


Mais je la mets comment dans la boucle ?

Et je fais quoi si "trouve" et égal à zéro je mets le "printf" dans la boucle ? :euh:
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 février 2006 à 15:14:15

Tu l'as bien placé là ;) en fait, à la sortie de la boucle, tu vois, il vaudra 1 si on a bien trouvé ou 0 si il n'a rien trouvé (il aura parcouru toute la boucle sans modifier la variable). Donc à la fin il suffit de rajouter :
if (trouve == 1)
{
    printf ("Le mot a bien ete trouve.\n");
}
else
{
    printf ("Le mot n'est pas dans le dictionnaire.\n");
}
  • Partager sur Facebook
  • Partager sur Twitter
26 février 2006 à 17:08:28

Ca ne fonctionne pas !!! o_Oo_Oo_O

j'ai constaté que le problème venait de la boucle ;

j'ai fait ça :

while (eof (fichier))
{
    fscanf (fichier, "%s %s",mot_latin ,mot_francais);
    if (strcmp (mot_latin, principale) == 0)
    {
        printf("Traduction de %s : %s\n\n\n\n", mot_latin, mot_francais);
        trouve = 1;
        break;
    }
}       
    printf(" %ld",trouve)
    if(trouve == 0)
    {
      printf("\nLe mot n'est pas dans le dictionnaire.\n");
    }


et la console m'affiche :

Image utilisateur

j'ai entré n'importe quoi ; le programme ne sort pas de la boucle , il n'affiche pas le
printf(" %ld",trouve);


Parce que dans la boucle tu avais mis
while (feof (fichier))


et là , le programme me disait toujours que le mot était introuvable ; j'ai changé en
while (eof (fichier))

et là ça fonctionne ( quand le mot est juste :lol: ) mais quand le mot n'est pas juste ... :D , alors il ne sort plus de la boucle ! o_O ; il boucle , boucle ; boucle infinie ! :p


Je sais , je suis ennervant ; il y a toujours des problèmes en C n'est ce pas ? :p
  • Partager sur Facebook
  • Partager sur Twitter
Anonyme
26 février 2006 à 19:30:55

Bouh j'ai fait une erreur : feof retourne vrai quand la fin de fichier est rencontré donc dans la boucle on met
while (!feof (fichier))
et pas
while (feof (fichier))

Citation : PianoPâriss

il y a toujours des problèmes en C n'est ce pas ?


En effet :p c'est fait pour ça :D
  • Partager sur Facebook
  • Partager sur Twitter
26 février 2006 à 19:43:26

Oui , ça fonctionne ( ça à l'air de fonctionner :p ) ;

je vais agrandir le programme ; il pourra y avoir plusieurs dico. etc.

Quand même , pour un *bête* point d'exlamation ! :lol:

Merci Louisclem

A++


PianoPâriss
  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2025 à 16:51:22

Salut tout le monde j’espère que vous allez bien 

je suis un debutant en free pascal et lorsque j’essai de declarez plusieurs type de variable ça présente des bugs dans le programme 

exemple 

     Var        Qte1, Qte2, Qte3 : real;

                 Qte4, Qte5 :integer;

  • Partager sur Facebook
  • Partager sur Twitter
2 avril 2025 à 17:01:38

@WilliamNoba Bonjour, ce sujet date de 2006 et est noté résolu. Merci de ne pas déterrer d'ancien sujet résolu, créer le votre en nous transmettant le code que vous avez écrit, inséré sur le forum à l'aide du bouton code </> de la barre d'outil du forum.

Je ferme ce déterrage.

Le message qui suit est une réponse automatique activée par un membre de l'équipe de modération. Les réponses automatiques leur permettent d'éviter d'avoir à répéter de nombreuses fois la même chose, ce qui leur fait gagner du temps et leur permet de s'occuper des sujets qui méritent plus d'attention.
Nous sommes néanmoins ouverts et si vous avez une question ou une remarque, n'hésitez pas à contacter la personne en question par Message Privé.

Pour plus d'informations, nous vous invitons à lire les règles générales du forum

Déterrage

Citation des règles générales du forum :

Avant de poster un message, vérifiez la date du sujet dans lequel vous comptiez intervenir.

Si le dernier message sur le sujet date de plus de deux mois, mieux vaut ne pas répondre.
En effet, le déterrage d'un sujet nuit au bon fonctionnement du forum, et l'informatique pouvant grandement changer en quelques mois il n'est donc que rarement pertinent de déterrer un vieux sujet.

Au lieu de déterrer un sujet il est préférable :

  • soit de contacter directement le membre voulu par messagerie privée en cliquant sur son pseudonyme pour accéder à sa page profil, puis sur le lien "Ecrire un message"
  • soit de créer un nouveau sujet décrivant votre propre contexte
  • ne pas répondre à un déterrage et le signaler à la modération

Liens conseillés

  • Partager sur Facebook
  • Partager sur Twitter