Chargement en cours...
Connexion au forum informatique de Sur-la-Toile
La discussion « tit prog en C » se trouve dans le forum « Programmation »
Statut de la discussion » tit prog en C « ( normale)

tit prog en C

» Liste des Forums » Programmation » Discussion

Le  7-12-2007 à 23:07 #


Salut,

je suis encore bloqué sur un petit exo: je dois écrire un programme qui affiche son entrée à raison d'un mot par ligne.

Pouvez-vous m'aider ?


Ajout du 08-12-2007 à 21:42:

Voici le programme que j'ai écrit:

#include <stdio.h>

#define DEDANS 1 /*dans un mot*/
#define DEHORS 0 /*à l'extérieur d'un mot*/

main()
{
int c, etat;
etat = DEHORS;
while((c = getchar()) != EOF) {
putchar(c);
if (c == '\n' || c == ' ' || c == '\t')
etat = DEHORS;
else if (etat == DEHORS) {
etat = DEDANS;
printf("\n"); }
}
}


Le résultat n'est pas exactement celui escompté: lorsque je tape par exemple "hello world" pour le tester, voilà le résultat:

h
ello w
orld

bizarre, non ????

Le 10-12-2007 à 11:59 #


Le résultat n'est pas exactement celui escompté: lorsque je tape par exemple "hello world" pour le tester, voilà le résultat:

h
ello w
orld

bizarre, non ????


Non pas vraiment.
Explication :

Initialement [etat] = [DEHORS]
Donc le premier passage se fait comme suit :
- On affiche le caractere a traiter ('h')
- Le caractere n est pas un espacement
- Nous sommes dans l [etat] [DEHORS] (valeur initiale)
- On affiche donc '\n' (on ne rentre pas dans le IF mais on rentre dans le
Else If) et [etat] = [DEDANS]
Code:
  1.   1er passage affiche :
  2.   h
  3.   [\n]


    Ensuite au sixieme passage (' ') :
    - on affiche le caractere
    - c est un espacement (' '), [etat] = [DEHORS]
    Code:
    1.   6eme passage affiche :
    2.   h
    3.   ello


      Ensuite au septieme passage ('w') :
      - on affiche le caractere
      - ce n est pas un espacement ('w') et [etat] = [DEHORS] (voir step
      precedent)
      - Donc on affiche '\n' et [etat] = DEDANS
      Code:
      1.   7eme passage affiche :
      2.   h
      3.   ello w
      4.   [\n]


        Pour remedier a ca, deux choses sont a modifier dans le code :
        - afficher le caractere apres le traitement dedans/dehors pour mettre
        sur une nouvelle ligne le nouveau mot
        - mettre [etat] a [DEDANS] initialement

        Code:
        1.   #include <stdio.h>
        2.   
        3.   #define DEDANS 1 /*dans un mot*/
        4.   #define DEHORS 0 /*à l'extérieur d'un mot*/
        5.   
        6.   main()
        7.   {
        8.    int c, etat;
        9.   // etat = DEHORS; // deuxieme fix
        10.    etat = DEDANS; // deuxieme fix
        11.   
        12.    while((c = getchar()) != EOF)
        13.    {
        14.    // putchar(c); // premier fix
        15.    if (c == '\n' || c == ' ' || c == '\t')
        16.    etat = DEHORS;
        17.    else if (etat == DEHORS) {
        18.    etat = DEDANS;
        19.    printf("\n");
        20.    }
        21.    putchar(c); // premier fix
        22.    }
        23.   }


          Bien cordialement.


          Le 10-12-2007 à 21:45 #

          Merci, ça fonctionne.

          P.S : ça marche aussi si l'on met l'etat initial à [DEHORS]

          Le 12-12-2007 à 16:52 #


          10-12-2007 à 21:45, neophythe :
          Merci, ça fonctionne.

          P.S : ça marche aussi si l'on met l'etat initial à [DEHORS]


          Exact, je suis fatiguee desole.
          Et puis en passant, je trouves ca plus logique de mettre l etat initial a [DEDANS]
          etant donne que normalement une phrase commence par un mot et pas par un espace mais bon ;)

          Cordialement.
          » Liste des Forums » Programmation




          Ces discussions pourraient vous intéresser également:


          Prog+probleme
          Mini prog
          [Prog] Fichier Patient
          Prog C rotation de bits sur un Byte
          recherche prog pour application emploi su temps

          Sujets Connexes

          Arakien & WéWé


          Forums

          Navigation


          Publicité

          Connectés

          Il y a actuellement 153 visiteurs et 4 toiliens en ligne, ainsi que 4 connectés sur le tchat.

          Recherche

          Inscription


          Sauf mention contraire, le contenu du blog et du forum est sous licence Creative Commons By-Sa. Vous avez le droit de le reproduire à condition de citer l'auteur, de faire un lien vers la page d'origine, et de partager vos travaux dérivés selon les mêmes conditions.

          Conditions d'utilisation -

          Partenaires: [Informatique Multimédia] [Portail du Maroc] [Actualité High Tech]
          [Tutoriaux Photoshop] [éligibilité ADSL] [Astuces Windows]

          Page générée en 313 millisecondes sur WWW2.