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


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:

5 réponses

Ronieee Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   38
 
Est-ce que tu as essayé de rajouter le terme \n ?

exemple :

scanf("%d \n", &age);
3
SniP02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   5
 
Merci pour ta réponse Ronieee, mais cela ne corrige pas le problème. Aurais-tu une idée du Linux le plus approprié pour la programmation stp ? Merci
0
Ronieee Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   38
 
En cours universitaire, on nous fait travailler sur un noyau Debian.
Si tu es débutant, la meilleur option serait de prendre les solutions Ubuntu (Kubuntu etc...), elle sont simples et très accompagnés.
0
SniP02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   5
 
Ok, encore merci. Je connais les solutions Ubuntu..., je vais essayer Debian.

Merci
0
Ronieee Messages postés 70 Date d'inscription   Statut Membre Dernière intervention   38
 
Attention !

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.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bonjour,
Non, il ne faut pas mettre de \n dans le scanf.
Cdlt,
0
SniP02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   5
 
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.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
-1
SniP02 Messages postés 95 Date d'inscription   Statut Membre Dernière intervention   5
 
Sous Linux "scanf" fonctionne très bien. Pour moi Windows a encore un temps de retard (je commence à avoir l'habitude). Merci pour vos réponses.
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
coolilted Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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
-1

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
coolilted Messages postés 7 Date d'inscription   Statut Membre Dernière intervention  
 
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.
-2
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0