gilou Modérateur Modosaurus Rex | Tu es sur une fenêtre Windows ou Linux pour tester cela?
En Windows il faut faire Ctrl+Z sur une ligne vide pour envoyer un EOF et en linux, c'est probablement Ctrl+D
(En fait, dans une fenetre DOS, Ctrl+Z est compris comme une marque de fin de texte, le caractère et ce qui suit n'est pas pris en compte. Quand on fait Ctrl+Z (+ retour chariot bien sur) sur une ligne vide, cela envoie donc une chaine vide, qui est interprétée comme EOF [puisque logiquement, s'il restait qque chose, la chaîne ne serait pas vide mais contiendrait au moins un \n])
Une autre idée de traitement, pondue vite fait à partir de ton code (pas vérifié que ça marche dans tout les cas, c'est pour te donner une idée de comment on pourrait faire)
Code :
- # include <stdio.h>
- #define DEHORS 0
- #define DEDANS 1
- int main() {
- int c, nl, nm, nc, ls, etat;
- etat = DEHORS;
- nl = nm = nc = ls = 0;
- do {
- switch (c = getchar()) {
- case EOF:
- if (ls) ++nl; /* EOF en fin de ligne non vide */
- break;
- case '\n':
- etat = DEHORS;
- ++nc; /* a mettre en commentaire si on ne veut pas les compter */
- ++nl;
- ls = 0;
- break;
- case ' ':
- case '\t':
- etat = DEHORS;
- ++nc;
- ++ls;
- break;
- default:
- if (etat == DEHORS) {
- etat = DEDANS;
- ++nm;
- }
- ++nc;
- ++ls;
- break;
- }
- } while (c != EOF);
- printf("Il y a %d lignes, %d mots et %d caracteres\n\n", nl, nm, nc);
- return 0;
- }
|
A+, Message édité par gilou le 08-05-2012 à 19:40:44 ---------------
There's more than what can be linked! -- Le capitaine qui ne veut pas obéir à la carte finira par obéir aux récifs. -- No jab ? No job ! -- (╯°□°)╯︵ ┻━┻
|