Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 24/08/2007, à 16:45

Goomy

Besoin de quelques conseils

Bonjour a tous,
J' ai besoin de votre aide pour un programme. Si possible mettez moi juste sur la voie sans me donner la solution (merci).

Voila le pb :

PROBLEME

Ecrivez un programme qui lit une ligne tapée au clavier et l'affiche cette ligne en remplaçant tous les espaces par le caractère "_".

Remarque : l'affichage peut se faire au fur et à mesure de la lecture de l'entrée. Il n'est pas nécessaire de stocker l'ensemble de la ligne avant de commencer à afficher le résultat.

LIMITES DE TEMPS ET DE MEMOIRE

    * Temps : 1 s sur une machine à 1Ghz.
    * Mémoire : 1000 Ko.

EXEMPLE(S) D'ENTREE / SORTIE

Exemple 1 :
en entrée ...
Voici un exemple de texte avec des espaces.
en sortie ...
Voici_un_exemple_de_texte_avec_des_espaces.

Voici mon code :

#include <stdio.h>

int main()
{
  char lettre=0;

  while (lettre=!'\n' , scanf ("%c",&lettre))
    {
      if (lettre==' ')
        printf ("%c",'_');

      else printf ("%c",lettre);
    }
  return 0;
}

J'arrive donc au résultat, mais mon programme met apparement trops de temps, et de plus la phrase avec les '_' ne s'affiche pas au fur et a mesure comme conseillé dans l'exos, mais seulement apres avoir préssé la touche enter.

En fait ma principale question est, comment peut ont faire pour afficher directement ce texte sans attendre la fin de la saisie ?

Merci

Hors ligne

#2 Le 24/08/2007, à 16:58

llwynrt

Re : Besoin de quelques conseils

bonjour

il me semble que scanf() attend l’appui sur la touche entrée, regarde plutôt du coté de getchar()

Marie-Lyse


Les erreurs Windows, c'est un peu comme les rêves, il faut savoir les interpréter, parfois ça peut vouloir dire quelque chose !

Hors ligne

#3 Le 24/08/2007, à 18:10

Mr.Bathor

Re : Besoin de quelques conseils

En mode raw ( cf : Developpez.com ) scanf n'est plus bloquant :

 #include <unistd.h>
 #include <stdlib.h>
 #include <curses.h>
 #include <termios.h>
 #include <term.h>




struct termios initial_settings, new_settings;


void mode_raw(int activer)
{
   static struct termios cooked;
   static int raw_actif = 0;

   if (raw_actif == activer)
   {
      return;
   }

   if (activer)
   {
      struct termios raw;

      tcgetattr(STDIN_FILENO, &cooked);

      raw = cooked;
      cfmakeraw(&raw);
      tcsetattr(STDIN_FILENO, TCSANOW, &raw);

   }
   else
   {
      tcsetattr(STDIN_FILENO, TCSANOW, &cooked);
   }

   raw_actif = activer;
}



int main()
{



char Lettre=0;


mode_raw(1);


        while (Lettre =!'\t' , scanf ("%c",&Lettre)) {

              if(Lettre!=(char)NULL)
              {


                if(Lettre!=32){
                    printf("%c",Lettre);
                }


                switch ( Lettre )
                {
                 case 32: printf("_"); break;
                }

              }

        }
        mode_raw(0);
}

Hors ligne

#4 Le 25/08/2007, à 09:28

Goomy

Re : Besoin de quelques conseils

Merci pour vos réponses,

le mode raw a l'air de prendre encore trop de temp, alors je vais me pencher du coté de getchar() et essayer de trouver des tutos appropriés. Si vous en connaissez sa serai 
simpas de les faire partager.

+

Hors ligne

#5 Le 25/08/2007, à 09:37

gatchan

Re : Besoin de quelques conseils

Lu dans mon aide-mémoire antédiluvien (1990 tout de même... ca ne me rajeunit pas)...

getchar

Syntaxe
   

int getchar(void);

Description
   

La macro getchar lit un caractère à partir du flux d'entrée standard STDIN qui est normallement connecté au clavier.

Fichier Include
   

#include <stdio.h>

Exemple
   

c = getchar();

Voili, voilou...

Dernière modification par gatchan (Le 25/08/2007, à 09:37)

Hors ligne