Arrêt du programme avec "scanf" sous Windows.
Résolu
SniP02
Messages postés
95
Date d'inscription
Statut
Membre
Dernière intervention
-
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
fiddy Messages postés 11069 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
Je suis en train de développé un petit programme sur console, sous Windows7 avec CodeBlocks.
Dans ce programme j'utilise un scanf. Chaque fois que je lance le programme, il s'exécute normalement jusqu'à cette ligne, puis une fois que j'appuie sur la touche entrée pour confirmée la saisie, le programme s'arrête et me demande d'appuyer sur entrée pour fermer celui-ci.
Voici un morceau du code :
C'est a la ligne "scanf" que le programme s'arrête puis passe directement a la ligne "return" sans exécuté la suite.
J'espère que vous comprenez le problème et merci d'avance a ce qui pourront me venir en aide.
Je suis en train de développé un petit programme sur console, sous Windows7 avec CodeBlocks.
Dans ce programme j'utilise un scanf. Chaque fois que je lance le programme, il s'exécute normalement jusqu'à cette ligne, puis une fois que j'appuie sur la touche entrée pour confirmée la saisie, le programme s'arrête et me demande d'appuyer sur entrée pour fermer celui-ci.
Voici un morceau du code :
int main (int argc, char *argv[]) { ... int age = 0 ; printf ("Quel age avez-vous ? ") ; scanf ("%d", &age) ; ... return 0 ; }
C'est a la ligne "scanf" que le programme s'arrête puis passe directement a la ligne "return" sans exécuté la suite.
J'espère que vous comprenez le problème et merci d'avance a ce qui pourront me venir en aide.
A voir également:
- Scanf windows
- Clé windows 8 - Guide
- Montage video windows - Guide
- Windows ne démarre pas - Guide
- Windows movie maker - Télécharger - Montage & Édition
- Restauration systeme windows 10 - Guide
5 réponses
Merci de ta réponse coolited, mais je me rend contre que c'est Windows qui n'est pas au point.
Je veux donc passé sur linux mais je ne sais pas lequel serais le mieux adapté a la programmation.
Quelqu'un aurait-il une idée ???
Merci d'avance.
Je veux donc passé sur linux mais je ne sais pas lequel serais le mieux adapté a la programmation.
Quelqu'un aurait-il une idée ???
Merci d'avance.
Bonjour,
Ce n'est pas Windows qui n'est pas au point, mais plutôt une non connaissance ^^. Depuis le temps, je te rassure, le langage C est au point avec Windows.
Le programme en fait exécute tout ce qu'il y a après scanf, mais il va tellement vite que tu as l'impression qu'il fait rien, et le return 0; ferme la fenêtre.
Deux solutions : soit tu lances le programme en console (comme on le fait souvent sur un système GNU/Linux). Mais sous GNU/Linux, t'aurais également le problème en le lancant graphiquement (double clique); soit tu mets un system("PAUSE"); juste avant le return 0; (stdlib.h) (ou un double getchar();).
Si cela ne résoud pas ton problème, précise-le davantage.
Cdlt,
Ce n'est pas Windows qui n'est pas au point, mais plutôt une non connaissance ^^. Depuis le temps, je te rassure, le langage C est au point avec Windows.
Le programme en fait exécute tout ce qu'il y a après scanf, mais il va tellement vite que tu as l'impression qu'il fait rien, et le return 0; ferme la fenêtre.
Deux solutions : soit tu lances le programme en console (comme on le fait souvent sur un système GNU/Linux). Mais sous GNU/Linux, t'aurais également le problème en le lancant graphiquement (double clique); soit tu mets un system("PAUSE"); juste avant le return 0; (stdlib.h) (ou un double getchar();).
Si cela ne résoud pas ton problème, précise-le davantage.
Cdlt,
A SniP02
Rah, mais lis les postes. Ce n'est pas l'OS qui détermine si une fonction portable va fonctionner ou pas. Que ce soit, sur MAC, GNU/LInux, Windows, scanf marche aussi bien.
La différence de fonctionnement s'explique sur la façon de lancer le programme. Si tu le lances en ligne de commandes la console ne se ferma pas en fin de programme. Si tu lances en double cliquant ton programme, la console se fermera dès qu'elle atteindra le return 0; de ton main, d'où le fait qu'on met un system("PAUSE"); avant le return.
Rah, mais lis les postes. Ce n'est pas l'OS qui détermine si une fonction portable va fonctionner ou pas. Que ce soit, sur MAC, GNU/LInux, Windows, scanf marche aussi bien.
La différence de fonctionnement s'explique sur la façon de lancer le programme. Si tu le lances en ligne de commandes la console ne se ferma pas en fin de programme. Si tu lances en double cliquant ton programme, la console se fermera dès qu'elle atteindra le return 0; de ton main, d'où le fait qu'on met un system("PAUSE"); avant le return.
reverifie ton code si possible une fois de plus. juste avec ce que tu a ecris, scanf marche! au fait pour fgets il marche seulment pour les chaines de caractères j'ai été distrait
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Langace C!
Donc j te rassure ce n'est pas de ta faute. scanf a un defaut. fait des recherches sur : fgets et utilise le il est mieux.
Donc j te rassure ce n'est pas de ta faute. scanf a un defaut. fait des recherches sur : fgets et utilise le il est mieux.
Pour être plus précis, je dirais que scanf a un défaut s'il est mal utilisé. C'est une fonction très compliqué et très puissante. Mais dans le cas du scanf("%d",...) ce n'est pas le gros défaut dont tu parles. De plus, pour utiliser fgets, il faudrait passer avec strtol pour convertir en entier en faisant les contrôles nécessaires.
Si tu es débutant, la meilleur option serait de prendre les solutions Ubuntu (Kubuntu etc...), elle sont simples et très accompagnés.
Merci
Debian est une distribution (comme peut l'être Red Hat, Mandriva, etc...)
Ubuntu est une solution basé sur Debian (un genre de distribution de distribution) tout comme peut l'etre Knoppix, Skolelinux qui sont sous Debian.
Tu peux essayer Debian, mais si Ubuntu ne te convient pas, Debian sera du meme noyau.
Non, il ne faut pas mettre de \n dans le scanf.
Cdlt,