Problème avec compteur

Problème avec compteur - C++ - Programmation

Marsh Posté le 12-02-2014 à 11:37:56    

Bonjour,  :bounce:
 
Quand je fais un compteur, j'aimerais bien qu'il ne compte plus les espaces comme des caractères :(  
 
Voilà la partie du code en question! :
 
                                 printf(" Votre phrase : " );
                                 caractere=getchar();  
                                           while(caractere != '\n'){  
                                                           caractere=getchar();
                                                           nbchar = nbchar+1;  
                                                           if(caractere==' ') nbespace = nbespace+1;  
                                                           }
 
Merci beaucoup!!

Reply

Marsh Posté le 12-02-2014 à 11:37:56   

Reply

Marsh Posté le 12-02-2014 à 13:52:32    

Bonjour,

 

Ton compteur ne fonctionne pas car tu lui demande d'incrementer ton nbchar en dehors de tout test.

 

Donc il te compte même les espace.

 

Pour ne pas qu'il te compte les espace ton code doit ressembler à celui ci

 
Code :
  1. main(){
  2.     int caractere;
  3.     int nbchar = 0;
  4.     int nbespace = 0;
  5.     printf(" Votre phrase : " );
  6.     caractere=getchar();
  7.     while(caractere != '\n'){
  8.         caractere=getchar();
  9.         if(caractere==' '){
  10.                 nbespace = nbespace+1;
  11.         }
  12.         else {
  13.             nbchar = nbchar+1;
  14.         }
  15.     }
  16.     printf("nombre de caractere : %d \n",nbchar);
  17. }
 

Ici si ton caractère == un espace alors il rentre dans le if
sinon tu rentre dans le else

 


J'ai compiler il fonctionne.
Si tu as des question n'hésite pas


Message édité par OrcusZ le 12-02-2014 à 13:53:18

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 13:58:59    

Effectivement c'est bien plus clair!!! Merci beaucoup *-*
J'essaye dès que je rentre chez moi :-D
 

Reply

Marsh Posté le 12-02-2014 à 14:07:13    

On peut aussi faire avec une boucle do..while

Code :
  1. main(){
  2.     int caractere;
  3.     int nbchar = 0;
  4.     int nbespace = 0;
  5.     printf(" Votre phrase : " );
  6.     do {
  7.         caractere = getchar();
  8.         if (caractere == ' ' ) {
  9.                ++ nbespace;
  10.         }
  11.         else {
  12.             ++nbchar;
  13.         }
  14.     } while (caractere != '\n');
  15.     --nbchar;  // pour le \n
  16.     printf("nombre de caractere : %d \n", nbchar);
  17. }


 
A+,

Message cité 1 fois
Message édité par gilou le 12-02-2014 à 14:09:10

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 14:08:58    

gilou a écrit :

Code :
  1. main(){
  2.     int caractere;
  3.     int nbchar = 0;
  4.     int nbespace = 0;
  5.     printf(" Votre phrase : " );
  6.     do {
  7.         caractere = getchar();
  8.         if (caractere == ' ' ) {
  9.                ++ nbespace;
  10.         }
  11.         else {
  12.             ++nbchar;
  13.         }
  14.     } while (caractere != '\n');
  15.     printf("nombre de caractere : %d \n",nbchar);
  16. }



 
Merci pour l'optimisation :p


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 14:13:18    

Nous n'avons pas encore appris cette façon de présenter en cours :-/  
Je vais m'y pencher! Merci à vous deux!!! :D

Reply

Marsh Posté le 12-02-2014 à 14:15:40    

J'avais pas fini d'éditer (un tab malheureux, l’absence de mon A+, le prouve :D), il faut décompter le \n final.
Je vois aussi à l'instant qu'il manque le int devant le main et le return a la fin (le int est obligatoire en C, si des compilos marchent sans, c'est leur pb)
Ça peut encore s'optimiser un peu:

Code :
  1. int main()
  2. {
  3.    int caractere;
  4.    int nbchar = 0;
  5.    int nbespace = 0;
  6.  
  7.    printf(" Votre phrase : " );
  8.    fflush ( stdout );
  9.  
  10.    do {
  11.        caractere = getchar();
  12.        if (caractere == ' ' ) {
  13.               ++ nbespace;
  14.               continue;
  15.        }
  16.        ++nbchar;
  17.    } while (caractere != '\n');
  18.    --nbchar;
  19.  
  20.    printf("nombre de caractere : %d \n",nbchar);
  21.  
  22.    return 0;
  23. }


 
A+,


Message édité par gilou le 12-02-2014 à 14:30:08

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 14:20:35    

Super Gilou!!!
Comment tu met un code en couleur sur le fofo ? C'est bien plus clair :')

Reply

Marsh Posté le 12-02-2014 à 14:29:20    

J'utilise le bouton C/C++ et je remplace les tags: [cpp]...[/cpp] par [code=c]...[/code]  (cette 2e partie est pas nécessaire pour du C, mais c'est pas exactement les mêmes couleurs qu'avec le C++)
(avec le premier [ en italique ici pour pas que le tout soit interprété comme un tag)
Ça marche avec les autres langages aussi
A+,


Message édité par gilou le 12-02-2014 à 14:33:03

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 14:30:50    

D'accord merci! J'essayerai d'en faire autant!

Reply

Marsh Posté le 12-02-2014 à 14:30:50   

Reply

Marsh Posté le 12-02-2014 à 14:46:12    

OrcusZ a écrit :

Merci pour l'optimisation :p

Ça peut encore s'optimiser un peu :whistle: :

Code :
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int caractere;
  6.    int nbchar = 0;
  7.    int nbespace = 0;
  8.  
  9.    printf(" Votre phrase : " );
  10.    fflush ( stdout );
  11.  
  12.    while  ((caractere = getchar()) != '\n') {
  13.        (caractere == ' ')?(++ nbespace):(++nbchar);
  14.    }
  15.  
  16.    printf("nombre de caractere : %d \n",nbchar);
  17.  
  18.    return 0;
  19. }


 
A+,

Message cité 1 fois
Message édité par gilou le 12-02-2014 à 14:49:43

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 14:55:56    

gilou a écrit :

Ça peut encore s'optimiser un peu :whistle: :

Code :
  1. #include <stdio.h>
  2.  
  3. int main()
  4. {
  5.    int caractere;
  6.    int nbchar = 0;
  7.    int nbespace = 0;
  8.  
  9.    printf(" Votre phrase : " );
  10.    fflush ( stdout );
  11.  
  12.    while  ((caractere = getchar()) != '\n') {
  13.        (caractere == ' ')?(++ nbespace):(++nbchar);
  14.    }
  15.  
  16.    printf("nombre de caractere : %d \n",nbchar);
  17.  
  18.    return 0;
  19. }
 

A+,

 

La sur un codeblock portable au boulot l'optimisation j'ai passé outre l'optimisation :o

 

Et vu que c'est une partie de son code on peut encore poussé l'opti plus loin mais il débute avec les joie de la programmation en C/C++...
Faut pas le démoralisé trop vite non plus :p

 

En tout cas c'est bien car ainsi oloxis a pu voir qu'il y a plusieurs façon d'écrire un programme :D


Message édité par OrcusZ le 12-02-2014 à 14:56:49

---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 15:03:16    

Oui pour le contenu de la boucle.
Par contre,  
while  ((caractere = getchar()) != '\n') {
....
}
 
C'est un idiome en C autant y être exposé le plus tôt possible.
 
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 15:42:12    

gilou a écrit :

Oui pour le contenu de la boucle.
Par contre,  
while  ((caractere = getchar()) != '\n') {
....
}
 
C'est un idiome en C autant y être exposé le plus tôt possible.
 
A+,


 
Je sais bien mais je fait pas de cette méthode, je met tous dans un tableau et je me débarrasse directement de \n ( avec un lenght de ma chaine de caractère saisie )
 
Enfin chacun ces méthodes.
 
A+ et merci :D


---------------
Made you your own sentence without believing that of the others...
Reply

Marsh Posté le 12-02-2014 à 16:03:05    

Donc pas optimal au vu de la mémoire consommée :whistle:  :sol:  
A+,


Message édité par gilou le 12-02-2014 à 16:03:18

---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Marsh Posté le 12-02-2014 à 17:00:01    

Sinon en version C++:

Code :
  1. #include <string>
  2. #include <iostream>
  3. #include <algorithm>
  4. int main()
  5. {
  6. std::cout << " Votre phrase : " << std::endl;
  7. std::string s;
  8. std::getline(std::cin, s);
  9. std::cout << "nombre de caractere : " << std::count_if(s.begin(), s.end(), [](char c) { return c!=' '; }) << std::endl;
  10. }

Reply

Marsh Posté le 12-02-2014 à 17:38:33    

Broblème plus que résolut! Merci à tous vous êtes géniaux!!

Reply

Marsh Posté le 13-02-2014 à 03:52:06    

Citation :

std::cout << " Votre phrase : " << std::endl;


Non, il voulait plutôt
std::cout << " Votre phrase : " << std::flush;
:p
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed