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
- Mètre en ligne - Guide
- Trousseau mot de passe iphone - Guide
- Mot de passe - Guide
- Mot de passe administrateur - 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