Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2134 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  [C, C++] Programme qui compte les caractères en entrée

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C, C++] Programme qui compte les caractères en entrée

n°349631
Z-Axis
Orienté troisième dimension
Posté le 01-04-2003 à 22:39:48  profilanswer
 

Bonjour,
Je suis entrain de lire le livre de K&R sur le langage C. Jusqu'a maintenant il n'y avait rien d'exeptionnel, seulement je suis tombé sur ce code dans le livre :
 
 

Code :
  1. #include <stdio.h>
  2. /* compte les caractères en entrée ; première version */
  3. main()
  4. {
  5. long nc;
  6. nc = 0;
  7. while (getchar() != EOF)
  8.  ++nc;
  9. printf("%1d\n", nc);
  10. }

 
 
Quand je le compile et que je l'exécute, j'obtiens
 
$ ./chap1_caract3
test
programmation
 
$
 
J'arrête le programme direct avec control + c puisqu'il se passe rien ?  
 :??:  Pourquoi il n'affiche pas la fonction printf pour afficher le but du programme : le nb de caractères ? ça doit etre tout con (j'ai p-e mal recopié, mais pourtant je me suis relus...)


---------------
x,y,z
mood
Publicité
Posté le 01-04-2003 à 22:39:48  profilanswer
 

n°349632
theshockwa​ve
I work at a firm named Koslow
Posté le 01-04-2003 à 22:57:38  profilanswer
 

Tu n'as pas fait de EOF ... :D
 
Ctrl-C => tu kill le prog ... donc pas de printf ...
 
(c'est Ctrl-D la fin de fichier, non ?)
 
(Pas sur du tout, mais essaye ... ca coute pas gd chose ... ;))


---------------
last.fm
n°349633
theshockwa​ve
I work at a firm named Koslow
Posté le 01-04-2003 à 22:58:47  profilanswer
 

sinon, tu peux lui passer un fichier en entrée ...
 
ou alors tu peux modifier le code pour qu'il te sorte le nb à la fin de la ligne ... (comparaison avec '\n' au lieu de EOF)


---------------
last.fm
n°349636
Z-Axis
Orienté troisième dimension
Posté le 01-04-2003 à 23:06:05  profilanswer
 

Tiens oui ça marche CTRL+D :) ça correspond à quoi ? enfin je trouve ça bizarre qu'on soit obligé d'avoir besoin de taper au clavier pour pouvoir continuer le programme "normalement", non ?
 
ou alors j'ai mal compris ce qu'était vraiment EOF :/


---------------
x,y,z
n°349690
Taz
bisounours-codeur
Posté le 02-04-2003 à 05:36:09  profilanswer
 

ltu dois mal lire le K&R alors ou avoir la première édition. le type par défaut n'est pas int, il faut le préciser (pour main void ou int (pour faire plaisir à C99))

n°349927
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 11:20:44  profilanswer
 

Z-Axis a écrit :

Tiens oui ça marche CTRL+D :) ça correspond à quoi ? enfin je trouve ça bizarre qu'on soit obligé d'avoir besoin de taper au clavier pour pouvoir continuer le programme "normalement", non ?
 
ou alors j'ai mal compris ce qu'était vraiment EOF :/


 
EOF : End Of File ... Ton prog est fait pour recevoir un fichier en entrée .. Pas une saisie utilisateur, apparamment ...
 
Par défaut, si tu ne lui envoie pas de fichier, le flux stdin est l'entrée clavier. CTRL-D est un moyen d'envoyer un signal de fin de flux au programme ... rien de plus ...


---------------
last.fm
n°349928
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 11:21:27  profilanswer
 

++Taz a écrit :

ltu dois mal lire le K&R alors ou avoir la première édition. le type par défaut n'est pas int, il faut le préciser (pour main void ou int (pour faire plaisir à C99))


:D Fais plaisir à Taz, ca coute rien ! :D


---------------
last.fm
n°350327
Z-Axis
Orienté troisième dimension
Posté le 02-04-2003 à 16:47:15  profilanswer
 

J'y ai réfléchis et en fait c'est con c'est vrai. Corriger moi si je me trompe, mais en fait, la boucle while  :
 
 

Code :
  1. while (getchar() != EOF )
  2.         ++nc;
  3. printf("%1d\n", nc);

 
 
qui signifie donc littéralement :  
 
tant que [ce que l'on entre au clavier] est différent de [EOF]  
ajouter 1 à nc  
afficher nc  
 
Mais comme while (getchar() != EOF) est toujours vérifié, on ne passe jamais à printf ? C'est une boucle infinie non ?
 
 
Sinon Taz, c'est la seconde édition du bouquin page 17. C'est le code tel que je l'ai écrit. (mais c'est normal qu'il mette pas les voidmain ou je sais pas quoi vu que c'est le tout début du livre)


---------------
x,y,z
n°350343
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 17:00:24  profilanswer
 

Z-Axis a écrit :


(...)
 
qui signifie donc littéralement :  
 
tant que [ce que l'on entre au clavier] est différent de [EOF]  
ajouter 1 à nc  
afficher nc  
 
Mais comme while (getchar() != EOF) est toujours vérifié, on ne passe jamais à printf ? C'est une boucle infinie non ?
 


 
Bingo ! ;)
 
Sauf si tu lui passes un fichier, auquel cas, il te retournera la taille exacte du fichier à l'octet près !


---------------
last.fm
n°350380
Taz
bisounours-codeur
Posté le 02-04-2003 à 17:20:08  profilanswer
 

ben c du old style à proscrire

mood
Publicité
Posté le 02-04-2003 à 17:20:08  profilanswer
 

n°350388
Z-Axis
Orienté troisième dimension
Posté le 02-04-2003 à 17:22:03  profilanswer
 

theShOcKwAvE a écrit :


 
Bingo ! ;)
 
Sauf si tu lui passes un fichier, auquel cas, il te retournera la taille exacte du fichier à l'octet près !


 
Bien alors !
Tu peux me dire comment "tu lui passes un fichier" ?  :??:  
Bah oui parce que chez moi, c'est un simple prompt le truc comme je l'ai dit dans mon premier post :
 
$ ./chap1_caract3
test
programmation
 
$  
 
 :??:


---------------
x,y,z
n°350391
Z-Axis
Orienté troisième dimension
Posté le 02-04-2003 à 17:23:13  profilanswer
 

++Taz a écrit :

ben c du old style à proscrire


 
J'y peux rien moi, mais les main void et tout ça arrive plus tard, c'est sans doute normal... je tiens à préciser que le chapitre s'intitule "Présentation générale du C" et que c'est le premier chapitre sur 8 !


---------------
x,y,z
n°350396
Taz
bisounours-codeur
Posté le 02-04-2003 à 17:24:17  profilanswer
 

je veux juste que tu comprennes que le k&R est la référence, mais qu'il date, depuis de nouvelles normes compatibles ANSI sont sorties, etc

n°350398
theshockwa​ve
I work at a firm named Koslow
Posté le 02-04-2003 à 17:25:38  profilanswer
 

Ca fait des plombes que j'ai pas refait de shell .... :D
 
ce serait pas un truc style
 
cat monFichier|monProg
 
 ???
 
Quelqu'un qui utilise Linux fréquemment devrait pouvoir te dire ca vite fait ...
 
Sous Dos, je ne sais pas si c'est possible ...


---------------
last.fm
n°350404
Z-Axis
Orienté troisième dimension
Posté le 02-04-2003 à 17:29:41  profilanswer
 

++Taz a écrit :

je veux juste que tu comprennes que le k&R est la référence, mais qu'il date, depuis de nouvelles normes compatibles ANSI sont sorties, etc


 
Oui sans doute, mais ça me donnera des bases quand même, ils ont quand même pas tout changés !?


---------------
x,y,z
n°350444
Taz
bisounours-codeur
Posté le 02-04-2003 à 18:31:29  profilanswer
 

non loin de là. apr contre le type apr défaut n'est plus int, il faut préciser le type explicitement


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  [C, C++] Programme qui compte les caractères en entrée

 

Sujets relatifs
Les chaines de caracteres, les tableaux....[WIN32 API] Comment lancer un programme a de son code?
[PHP/MySQL] Limiter le nombre de caractères..Transformer les caractères non alphanumérique dans une URL
Programme Java (niveau Licence Info)[HTML] Comment prendre en compte les espaces dans les formulaires ???
Passer des caractères spéciaux vers les accents en phpEvenement cliqué sur un bouton créé par programme (MFC) ?
Entrée clavier avec PHP en ligne de commande ?iverser des chaines de caracteres
Plus de sujets relatifs à : [C, C++] Programme qui compte les caractères en entrée


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR