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

  FORUM HardWare.fr
  Programmation
  C++

  Problème avec compteur

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Problème avec compteur

n°2219341
oloxis
Posté le 12-02-2014 à 11:37:56  profilanswer
 

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!!

mood
Publicité
Posté le 12-02-2014 à 11:37:56  profilanswer
 

n°2219352
OrcusZ
Pro AMD | .Net lover
Posté le 12-02-2014 à 13:52:32  profilanswer
 

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...
n°2219353
oloxis
Posté le 12-02-2014 à 13:58:59  profilanswer
 

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

n°2219355
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 14:07:13  profilanswer
 

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é!  --
n°2219357
OrcusZ
Pro AMD | .Net lover
Posté le 12-02-2014 à 14:08:58  profilanswer
 

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...
n°2219359
oloxis
Posté le 12-02-2014 à 14:13:18  profilanswer
 

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

n°2219361
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 14:15:40  profilanswer
 

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é!  --
n°2219362
oloxis
Posté le 12-02-2014 à 14:20:35  profilanswer
 

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

n°2219365
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 14:29:20  profilanswer
 

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é!  --
n°2219366
oloxis
Posté le 12-02-2014 à 14:30:50  profilanswer
 

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

mood
Publicité
Posté le 12-02-2014 à 14:30:50  profilanswer
 

n°2219370
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 14:46:12  profilanswer
 

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é!  --
n°2219373
OrcusZ
Pro AMD | .Net lover
Posté le 12-02-2014 à 14:55:56  profilanswer
 

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...
n°2219374
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 15:03:16  profilanswer
 

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é!  --
n°2219379
OrcusZ
Pro AMD | .Net lover
Posté le 12-02-2014 à 15:42:12  profilanswer
 

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...
n°2219382
gilou
Modérateur
Modzilla
Posté le 12-02-2014 à 16:03:05  profilanswer
 

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é!  --
n°2219390
Polo37
Posté le 12-02-2014 à 17:00:01  profilanswer
 

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. }

n°2219394
oloxis
Posté le 12-02-2014 à 17:38:33  profilanswer
 

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

n°2219447
gilou
Modérateur
Modzilla
Posté le 13-02-2014 à 03:52:06  profilanswer
 

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é!  --

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

  Problème avec compteur

 

Sujets relatifs
Problème avec compteur + boucleproblème de compteur
Problème de compteurrecuperation d'IP sur serveur distant, probleme de compteur
[SQL] Problème de compteurcompteur de telechargement mal placé: problème code html ?
[PHP/SQL] Problème compteurPetit problème en C... compteur par rapport à un nombre de jours
[VBnet] Problème avec un compteur[PHP] Probleme de compteur de visite et de cookie
Plus de sujets relatifs à : Problème avec compteur


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