CONNEXION
  • RetourJeux
    • Sorties
    • Hit Parade
    • Les + populaires
    • Les + attendus
    • Soluces
    • Tous les Jeux
    • Gaming
  • RetourActu Gaming
    • News
    • Astuces
    • Tests
    • Previews
    • Toute l'actu gaming
  • RetourBons plans
    • Bons plans
    • Bons plans Smartphone
    • Bons plans Hardware
    • Bons plans Image et Son
    • Bons plans Amazon
    • Bons plans Cdiscount
    • Bons plans Decathlon
    • Bons plans Fnac
    • Tous les Bons plans
  • RetourJVTech
    • Actus High-Tech
    • Intelligence Artificielle
    • Smartphones
    • Mobilité urbaine
    • Hardware
    • Image et son
    • Tutoriels
    • Tests produits High-Tech
    • Guides d'achat High-Tech
    • JVTech
  • RetourCulture
    • Actus Culture
    • Culture
  • RetourVidéos
    • A la une
    • Gaming Live
    • Vidéos Tests
    • Vidéos Previews
    • Gameplay
    • Trailers
    • Chroniques
    • Replay Web TV
    • Toutes les vidéos
  • RetourForums
    • Hardware PC
    • PS5
    • Switch 2
    • Xbox Series
    • Switch
    • Pokemon pocket
    • FC 25 Ultimate Team
    • League of Legends
    • Tous les Forums
  • PC
  • PS5
  • Xbox Series
  • Switch 2
  • PS4
  • One
  • Switch
  • iOS
  • Android
  • MMO
  • RPG
  • FPS
En ce moment Genshin Impact Valhalla Breath of the wild Animal Crossing GTA 5 Red dead 2
Liste des sujets

[C] Bug boucle switch

bnji47
bnji47
Niveau 42
31 octobre 2013 à 20:55:43

Bonjour,
je débute en C et j'ai un problème sur la boucle switch de mon programme :
Mon programme doit lire au clavier 50 caractères et ensuite calculer et afficher le nombre de voyelles.

J'ai donc mis un switch dans une boucle for, le comptage de voyelles fonctionne correctement mais c'est la boucle for qui merde et je ne sais pas pourquoi, en fait elle divise par 2 la limite que j'ai indiqué !

lim = 50
for (i = 0 ; i < lim ; i++) ;

Quand je lance le programme, il s'arrete quand je saisi 25 caractères, j'ai essayé en modifiant la limite et ça divise systématiquement cette valeur par 2 !!! WTF

En vous remerciant d'avance, pouvez vous m'aider. Au revoir.

bnji47
bnji47
Niveau 42
31 octobre 2013 à 20:57:30

Je poste l'intégralité du code :

  1. include <stdio.h>
  2. include <stdlib.h>

int main()
{
int lim, voy, i ;
char ltr ;
lim = 50 ;
voy = 0 ;
printf("Veuillez saisir 50 caractères différents\n") ;
for (i = 0 ; i < lim ; i++)
{
scanf("%c", &ltr) ;
switch (ltr)
{
case 'a' :
voy = voy + 1 ;
break ;
case 'e' :
voy = voy + 1 ;
break ;
case 'i' :
voy = voy + 1 ;
break ;
case 'o' :
voy = voy + 1 ;
break ;
case 'u' :
voy = voy + 1 ;
break ;
case 'y' :
voy = voy + 1 ;
break ;
}
}
printf ("Vous avez saisi %d voyelles\n", voy) ;
system("pause") ;
return 0 ;
}

Ace_Attorney
Ace_Attorney
Niveau 10
31 octobre 2013 à 21:20:30

Ce n'est pas ta boucle ou ton switch qui merde, ton problème est lié à ton appel à scanf.

Quand tu vas taper une lettre dans ton clavier, tu n'auras pas un unique caractère, mais deux, ton caractère, puis ensuite un '\n'.

Donc ton scanf va lire le premier caractère dans stdin, va faire l'appel, va exécuter toute les instructions contenus dans ta boucle, va revenir une nouvelle en incrémentant ta valeur de 1, et vu qu'il reste encore un élément à lire dans stdin (le retour chariot), va re-exécuter une nouvelle fois toute les instructions et incrémenter une nouvelle fois i de 1.

FortCommeMeric
FortCommeMeric
Niveau 10
31 octobre 2013 à 21:32:43

Si tu veux taper le texte lettre par lettre, en appuyant sur entrée à chaque fois tu peux faire : scanf("%c\n", &lettre);

si tu veux taper le texte sans avoir à appuyer sur entrée à chaque fois tu peux mettre dans ta boucle lettre = getchar();

bnji47
bnji47
Niveau 42
31 octobre 2013 à 21:39:11

Que faut-il que je change alors ?

et je vois pas le pb avec mon scanf =/ (je suis nouveau n'oubliez pas :-) )

Je code avec codeblocks au fait.

FortCommeMeric
FortCommeMeric
Niveau 10
31 octobre 2013 à 21:57:57

Quand t'écris des trucs dans la console par exemple : abcde et que tu appuie sur entrée, abcde + entrée sont envoyés à l'entrée standard.

Quand tu appelles la fonction scanf, elle va récupérer un élément de l'entrée standard et le mettre dans ta variable. donc après un appel de scanf il restera dans l'entrée standard bcde + entrée, là tu peux encore appeler scanf 4 fois pour récupérer bcde, si tu l’appelle encore une fois ensuite elle va récupérer '\n' c'est un char qui représente le retour à la ligne (parce que t'as appuyé sur entrée).

Sinon pour ton programme il est censé marcher, suffit que tu écrive tes 50 caractères et que tu appuies sur entrée

Sous forums
  • Aide à l'achat Mac
  • Création de Jeux
  • Linux
  • Création de sites web
  • Programmation
  • Internet
  • Steam Deck
  • Macintosh
  • Hardware
La vidéo du moment