1 mot par ligne en C
Bonjour , en C j'ai ceci :
écrire un programme qui affiche son entrée à raison de 1 mot par ligne , voici mon code :
ce programme marche , il me donne çà :
./a.out
salut çà baigne . ( là je tape sur entrée et j'ai çà : )
salut
çà
baigne
mais moi j'aimerais que dès que je tape ma phrase et que je tape sur la touche espace , çà passe directement à la ligne , au lieu de m'écrire la phrase entière et que ensuite en appuyant sur entrée il m'affiche un mot par ligne .
merci de votre aide
écrire un programme qui affiche son entrée à raison de 1 mot par ligne , voici mon code :
int main(void)
{
int c;
while ((c=getchar()) != EOF)
{
if ( c == ' ')
putchar('\n');
else
putchar(c);
}
return 0;
}
ce programme marche , il me donne çà :
./a.out
salut çà baigne . ( là je tape sur entrée et j'ai çà : )
salut
çà
baigne
mais moi j'aimerais que dès que je tape ma phrase et que je tape sur la touche espace , çà passe directement à la ligne , au lieu de m'écrire la phrase entière et que ensuite en appuyant sur entrée il m'affiche un mot par ligne .
merci de votre aide
A voir également:
- 1 mot par ligne en C
- Partager photos en ligne - Guide
- Mot de passe - Guide
- Mètre en ligne - Guide
- Trousseau mot de passe iphone - Guide
- Formulaire en ligne de meta - Guide
4 réponses
Salut,
Je crois que c'est l'approche qu'il faut changer.
Exemple sous vc++ :
Ton code cherche la fin de ligne : ((c=getchar()) != EOF)
Sur une saisie au clavier le "Entrée" fait office de EOF.
Utilise plutôt un caractère d'arrêt.
((c=getchar()) != '*')
Lupin
Je crois que c'est l'approche qu'il faut changer.
Exemple sous vc++ :
#include <iostream> // Charge pour les instructions cout,endl
#include <conio.h> // Charge pour l'instruction getch()
char car=0;
char ligne=0;
int main()
{
while ((car = getch()) != '*')
{
if ( car == ' ') std::cout << "\n";
else std::cout << car;
}
std::cout << "\nTermine" << std::endl;
return 0;
}
Ton code cherche la fin de ligne : ((c=getchar()) != EOF)
Sur une saisie au clavier le "Entrée" fait office de EOF.
Utilise plutôt un caractère d'arrêt.
((c=getchar()) != '*')
Lupin
re:
j'avais compris !
mais pas de compilateur pour tester ta syntaxe !
j'avais compris !
mais pas de compilateur pour tester ta syntaxe !
int main(void)
{
int c;
while ((c=getchar()) != '*')
{
if ( c == ' ') putchar( c + '\n' );
else putchar(c);
}
return 0;
}
Lupin
De toute façon son code c++ était pas top (variables globales qui n'ont pas lieu d'être, utilisation de conio.h alors que ce n'est pas nécessaire.
Je tiens à signaler qu'en c++ un header ça s'include sans mettre .h (et si c'est un header C, on le met l'include dans un extern "C" { ...})
Ensuite je pense que le putchar( c + '\n' ); ne marchera pas car on ne concatène pas des caractères (là ont fait une somme de deux valeurs, donc un caractère qui n'a rien à voir !).
Il faut à mon avie que tu fasse un fgetc sur stdin et que tu traites s'il s'agit d'un espace, d'un retour chariot etc...
Bonne chance
Je tiens à signaler qu'en c++ un header ça s'include sans mettre .h (et si c'est un header C, on le met l'include dans un extern "C" { ...})
Ensuite je pense que le putchar( c + '\n' ); ne marchera pas car on ne concatène pas des caractères (là ont fait une somme de deux valeurs, donc un caractère qui n'a rien à voir !).
Il faut à mon avie que tu fasse un fgetc sur stdin et que tu traites s'il s'agit d'un espace, d'un retour chariot etc...
Bonne chance