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

aide langage C getch ()

vampirou720
vampirou720
Niveau 9
13 novembre 2011 à 20:38:00

bonjour
je suis un débutant dans la programmation et j'ai un problème avec la fonction getch (); qui permet de ne pas fermer automatique la fenêtre jusqu'à ce qu'on clique sur entrée ; le problème c'est que quand j'ecris le programme et que je clique sur compiler il me fait " expected constructor, destructor, or type conversion before ';' token " dans la ligne de getch ()
je précise que j'utilise dev c ++
alors pouvez vous m'aidez ?

caelacanthe
caelacanthe
Niveau 10
13 novembre 2011 à 20:45:32

aides-nous à t'aider, et poste le code source concerné, ça devrait simplifier les choses. :peur:

vampirou720
vampirou720
Niveau 9
13 novembre 2011 à 21:40:55

je ne comprends pas ce que tu veux dire c'est quoi le code source ? est ce que je dois copier le programme parce que c'est ultra simple il fait juste la somme de a et b mais bon le voici

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

main ()
{
int a,b ;
printf("donnez un entier") ;
scanf("%d",&a) ;
printf("donnez un entier") ;
scanf("%d",&b) ;
printf("%d+%d=%d",a,b,a+b);
}
getch () ;

caelacanthe
caelacanthe
Niveau 10
13 novembre 2011 à 21:44:57

tu dois mettre getch() à l'intérieur de main(), pas à l'extérieur. :(

vampirou720
vampirou720
Niveau 9
13 novembre 2011 à 21:53:42

je n'ai pas compris ce que tu veux dire ; est ce que je dois mettre getch () et apres fermer l'accolade ?

caelacanthe
caelacanthe
Niveau 10
13 novembre 2011 à 22:00:53

tout à fait. :oui:

main() est le point d'entrée du programme, il va exécuter les instructions dans l'ordre jusqu'a l'accolade de fin (en marquant une pause sur le getch()) et se terminer sur celle-ci.

vampirou720
vampirou720
Niveau 9
13 novembre 2011 à 22:04:03

merci ca a marché :hap:

chris_27
chris_27
Niveau 10
14 novembre 2011 à 01:57:18

gecth() ça rime avec ennuis… couple ça à scanf et c'est le drame…

Oh, wait… mais c'est exactement ce qui se passe.

Je vais résoudre le problème en amon. Tu es sans doute en train de coder sous windows, donc remplace ton getch() par une vraie pause :

system("pause");

Et hop, problème réglé. :oui:

dagov
dagov
Niveau 9
15 novembre 2011 à 19:31:17

+1 Chris_27

system("pause");

C'est bien plus pratique et puis après tu peux te débarrasser de #include <conio.h>

:hap:

chris_27
chris_27
Niveau 10
15 novembre 2011 à 20:51:03

Moi je vois surtout que scanf NE vide PAS stdin. Donc un getch() juste après n'a aucune raison de produire l'effet d'une pause. :oui:

guyver2
guyver2
Niveau 10
16 novembre 2011 à 09:22:38

comment ça scanf ne vide pas stdin ?
si tu fais plusieurs scanf d'affilé tu as bien plusieurs lectures différentes.

chris_27
chris_27
Niveau 10
16 novembre 2011 à 10:18:39

Bien sûr que non.

Essaie de lancer ceci et de taper un 'a', et tu verras qu'il va rester dans le buffer associé à stdin.

  1. include <stdio.h>

int main(void)
{
  int nb=1;
  do {
    printf("Saisir un nombre : ");
    scanf("%d", &nb);
  } while (nb != 0);
  return 0;
}

De même, si on lance le code de l'OP et qu'on tape disons « 12a » pour b, le scanf va manger le « 12 », mais il restera le « a » qui sera immédiatement consommer par getch(). Donc, pas de pause.

Paulop
Paulop
Niveau 12
16 novembre 2011 à 11:36:00

fgets + sscanf pour éviter ce genre de problème :oui:

guyver2
guyver2
Niveau 10
16 novembre 2011 à 11:42:36

oh ok je vois.
mais bon scanf vide quand meme stdin de ce qu'il arrive a manger. Dans un monde parfait ou OP va taper que des nombres pour tester son programme c'est pas dramatique. Meme si en effet ya aucune garantie :)

chris_27
chris_27
Niveau 10
16 novembre 2011 à 13:48:21

Paulop: dans les applications où on a besoin d'être fin sur ce qu'on récupère, c'est effectivement un bien meilleur réflexe que de passer par les fonctions que tu cites.

guyver2: non, scanf NE vide PAS. Il se contente juste de retirer ce qui est en adéquation avec ses attentes. Vider, pour moins, ça veut dire qu'il ne reste plus rien. :-)

Quant aux garanties :
1) tu sais combien des tes variables ont une valeur cohérente (c'est retourner par scanf)
2) par toujours du principe qu'après un scanf, le buffer de stdin est non-vide (à moins de demander un %s, tu peux toujours taper une entrée qui conduira à un buffer non-vide).

guyver2
guyver2
Niveau 10
16 novembre 2011 à 18:45:30

c'est peut être de l'overkill pour vampirou qui apprends a faire une addition. Je vois souvent des gens ici s'insurger contre le fait d'embrouiller avec des détails ou des hacks les petits jeunes :)

--
non, scanf NE vide PAS. Il se contente juste de retirer ce qui est en adéquation avec ses attentes. Vider, pour moins, ça veut dire qu'il ne reste plus rien
--
oui c'est ce que je dis par "vide ce qu'il arrive a manger"

Pocolo
Pocolo
Niveau 10
16 novembre 2011 à 19:43:41

Attention la fonction getch() est un peu spéciale il me semble (à ne pas confondre avec getc() ou getchar()), je crois qu'elle n'ajoute pas le caractère au buffer.

Pocolo
Pocolo
Niveau 10
16 novembre 2011 à 19:54:43

Enfin, en gros elle ne lis pas le caractère à partir du buffer de stdin.

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