[debutant] getchar et les boucles en c
Résolu
elmadina
Messages postés
33
Date d'inscription
Statut
Membre
Dernière intervention
-
elmadina Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
elmadina Messages postés 33 Date d'inscription Statut Membre Dernière intervention -
Bonsoir,
je debute dans la programmation en c j'essaye de faire les exemples que j'ai trouvé dans un livre
mais j'ai un problem a l'execution
voila le code
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
je compile le programme sans problem dans une fenêtre terminal a l'aide de la commande cc sous ubuntu7.10
et je l'execute avec ./a.out
mais le programme ne se termine pas je n'arrive pas a sortir de la boucle que si j'appuie sur la combinaison des touches ctrl+c
mais le problem c'est que la derniere instruction ne s'execute pas (printf)
donc je n'ai pas de resultat
j'ai utilisé un autre code avec le meme test d'arret et c'est la meme chose et quand j'ai changé le test d'arret ça marche je pense que le probleme est dans getchar()
mais je n'arrive pas a le localiser pouriez vous m'aider
merci a tous
je debute dans la programmation en c j'essaye de faire les exemples que j'ai trouvé dans un livre
mais j'ai un problem a l'execution
voila le code
#include <stdio.h>
#define IN 1 /* inside a word */
#define OUT 0 /* outside a word */
/* count lines, words, and characters in input */
main()
{
int c, nl, nw, nc, state;
state = OUT;
nl = nw = nc = 0;
while ((c = getchar()) != EOF) {
++nc;
if (c == '\n')
++nl;
if (c == ' ' || c == '\n' || c == '\t')
state = OUT;
else if (state == OUT) {
state = IN;
++nw;
}
}
printf("%d %d %d\n", nl, nw, nc);
}
je compile le programme sans problem dans une fenêtre terminal a l'aide de la commande cc sous ubuntu7.10
et je l'execute avec ./a.out
mais le programme ne se termine pas je n'arrive pas a sortir de la boucle que si j'appuie sur la combinaison des touches ctrl+c
mais le problem c'est que la derniere instruction ne s'execute pas (printf)
donc je n'ai pas de resultat
j'ai utilisé un autre code avec le meme test d'arret et c'est la meme chose et quand j'ai changé le test d'arret ça marche je pense que le probleme est dans getchar()
mais je n'arrive pas a le localiser pouriez vous m'aider
merci a tous
A voir également:
- [debutant] getchar et les boucles en c
- Logiciel de programmation pour débutant - Guide
- Logiciel montage vidéo débutant - Guide
- Mon pc s'allume et s'éteint en boucle ✓ - Forum Matériel & Système
- Xiaomi s'éteint tout seul et se rallume en boucle - Forum Xiaomi
- Pc qui s'allume et s'éteint en boucle - Forum Virus
3 réponses
Salut,
si je ne me trompe pas il s'agit de livre du Kernighan & Ritchie (K&R)
le code est correct est il est conçu pour lire dépuis l'entrée standard
Sous linux il fonctionne sans problème
si je ne me trompe pas il s'agit de livre du Kernighan & Ritchie (K&R)
le code est correct est il est conçu pour lire dépuis l'entrée standard
Sous linux il fonctionne sans problème
lami20j@debian:~/trash$ cat ccm.c #include <stdio.h> #define IN 1 /* inside a word */ #define OUT 0 /* outside a word */ /* count lines, words, and characters in input */ main() { int c, nl, nw, nc, state; state = OUT; nl = nw = nc = 0; while ((c = getchar()) != EOF) { ++nc; if (c == '\n') ++nl; if (c == ' ' || c == '\n' || c == '\t') state = OUT; else if (state == OUT) { state = IN; ++nw; } } printf("%d %d %d\n", nl, nw, nc); } lami20j@debian:~/trash$ gcc ccm.c lami20j@debian:~/trash$ ./a.out voici un test pour ton code 2 6 28 lami20j@debian:~/trash$
Salut,
EOF pour End Of File est utilisé pour les fichiers, pour savoir quand on est arrivé au bout. Il corresponds au caractère Ctrl + D.
Le problème c'est que quand on tape Ctrl + D, ça interrompt le programme.
Essaie plutôt d'utiliser EOL pour End Of Line, comme ça dés que tu tapes sur entrée ta boucle est finie.
EOF pour End Of File est utilisé pour les fichiers, pour savoir quand on est arrivé au bout. Il corresponds au caractère Ctrl + D.
Le problème c'est que quand on tape Ctrl + D, ça interrompt le programme.
Essaie plutôt d'utiliser EOL pour End Of Line, comme ça dés que tu tapes sur entrée ta boucle est finie.
oui le livre est
The C programming Language
By Brian W. Kernighan and Dennis M. Ritchie.
mais comment tu as sortie du programme vous avez taper sur quoi
et merci