Programme en C

kirua-93 Messages postés 599 Date d'inscription   Statut Membre Dernière intervention   -  
kirua-93 Messages postés 599 Date d'inscription   Statut Membre Dernière intervention   -
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   Statut Membre Dernière intervention   148
 
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   Statut Membre Dernière intervention   72
 
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   Statut Membre Dernière intervention   72
 
Merci loupius
-1