Pages : 1
#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
Pages : 1