Programme en C

Fermé
kirua-93 Messages postés 599 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 octobre 2014 - 10 juin 2010 à 00:41
kirua-93 Messages postés 599 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 octobre 2014 - 10 juin 2010 à 14:22
Bonjour,

Voila j'ai fait se code mais je ne comprend pas pourquoi cela ne marche que une seule fois. La seconde fois il se trompe

PS il faut avoir un fichier dico.txt a coter pour pouvoir comparer les mots qu'ils contient

Merci

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

void menux(){

printf ("\t*********************************\n");
printf ("\t* Bienvenue sur l'anagrammeur *\n");
printf ("\t*********************************\n");
printf ("\n");
}

int main(int argc, char *argv[])
{
FILE* fichier = NULL;
fichier = fopen("dico.txt", "r");
char chaine[100];
char motsfichier[100] = "";
char motEntre[100];
char motsutilisateur[100];
int a =0;
int longueurChaine = 0;
int compteur = 0;
int choixMenu = 0;
menux();
while(compteur == 0){

printf ("--------------------------------------------------\n");
printf ("| (1) Nombre de lettre |Taper 1|\n");
printf ("--------------------------------------------------\n");
printf ("| (2) Verifier le mot |Taper 2|\n");
printf ("--------------------------------------------------\n");
printf ("| (3) Anagramme du mot |Taper 3|\n");
printf ("--------------------------------------------------\n");
printf ("| (0) Quitter le programme |Taper 0|\n");
printf ("--------------------------------------------------\n");
printf ("\n");

printf ("Que voulais vous faire ? ");
scanf ("%d", &choixMenu);
printf ("\n");


if(choixMenu == 0)
{
return 0;
}


if(choixMenu == 1)
{
printf ("Veuillez saisir un mot\n");
scanf ("%s", motEntre);
printf ("\n");
longueurChaine = strlen (motEntre);
printf ("La mot %s fait %d caracteres de long\n", motEntre, longueurChaine);
printf ("\n");
printf ("\n");
printf ("\n");
}



if(choixMenu == 2)
{
printf ("Veuillez saisir un mot\n");
printf("Entre un mots: ");
fscanf(stdin,"%s", motsutilisateur);



if (fichier != NULL)
{
while (fscanf(fichier, "%s", motsfichier) != NULL) //lit la chaine
{

if (strcmp(motsutilisateur, motsfichier) == 0) // Si strcmp renvoie 0 (chaînes identiques)
{
printf("Ce mots est bien francais ^^\n");
printf ("\n");
printf ("\n");
break;
}
else
{
a++;
if(a > 400000)
{

printf("Ce mot n'est pas francais\n");
printf ("\n");
printf ("\n");
break;
}
}
}
}

}
if(choixMenu == 3)
{
printf ("En cour de creation \n");
printf ("\n");
printf ("\n");
}
}
}



3 réponses

loupius Messages postés 697 Date d'inscription dimanche 1 novembre 2009 Statut Membre Dernière intervention 31 décembre 2017 148
10 juin 2010 à 02:21
Il te manquait seulement une instruction ;-)
Après quelques modifications et quelques simplifications, le code pourrait ressembler à ceci:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>

int main(int argc, char* argv[])
{
  FILE* fichier = NULL;
  fichier = fopen("dico.txt", "r");
  char motFichier[100] = "";
  char motEntre[100];
  int choixMenu = 0;
  char* chnTrouve = "Ce mot est bien français ^^";
  char* chnPasTrouve = "Ce mot n'est pas français";
  char* chn;

  printf ("\n\t*********************************\n");
  printf ("\t* Bienvenue sur l'anagrammeur *\n");
  printf ("\t*********************************");

  while (1)
  {
    printf ("\n\n--------------------------------------------------\n");
    printf ("| (1) Nombre de lettres |Taper 1|\n");
    printf ("| (2) Vérifier le mot |Taper 2|\n");
    printf ("| (3) Anagramme du mot |Taper 3|\n");
    printf ("| (0) Quitter le programme |Taper 0|\n");
    printf ("--------------------------------------------------\n");
    printf ("Que voulez vous faire ? ");
    scanf ("%d", &choixMenu);
    printf ("\n");

    switch (choixMenu)
    {
      case 0:
        return 0;
      case 1:
        printf ("Veuillez saisir un mot\n");
        scanf ("%s", motEntre);
        printf ("\n");
        printf ("Le mot %s contient %d caractères",motEntre,strlen (motEntre));
        break;
      case 2:
        printf ("Veuillez saisir un mot\n");
        printf("Entrez un mot: ");
        fscanf(stdin,"%s", motEntre);
        if (fichier)
        {
          chn = chnPasTrouve;
          rewind(fichier);
          while (fgets(motFichier, 100, fichier)) //lit une chaine
          {
            sscanf(motFichier, "%s", motFichier);
            if (!strcmp(motEntre, motFichier))
            {
              chn = chnTrouve;
              break;
            }
          }
          printf("%s", chn);
        }
        break;
      case 3:
        printf ("En cours de création");
        break;
    }
  }
  return EXIT_SUCCESS;
}
Bonne continuation.
1
kirua-93 Messages postés 599 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 octobre 2014 72
10 juin 2010 à 14:22
Ah par hasard tu ne saurait pas comment je doit mis prendre pour manipuler une chaine pour obtenir tout les mots possible avec les même lettres que contienne un une chaine.
Je penser me servir soit d'un tableau, soit de la valeur de chaque lettre
exemple A = 65.

Tu en pense quoi ?
0
kirua-93 Messages postés 599 Date d'inscription mardi 8 janvier 2008 Statut Membre Dernière intervention 27 octobre 2014 72
10 juin 2010 à 02:23
Merci loupius
-1