Arrêt du programme avec "scanf" sous Windows.

Résolu
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.

5 réponses

  • Votes
  • Date
  • Date décroissante
  1. Est-ce que tu as essayé de rajouter le terme \n ?

    exemple :

    scanf("%d \n", &age);
    1. 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
    2. 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.
    3. Ok, encore merci. Je connais les solutions Ubuntu..., je vais essayer Debian.

      Merci
    4. 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.
    5. Contributeur
      Bonjour,
      Non, il ne faut pas mettre de \n dans le scanf.
      Cdlt,
  2. 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.
    1. Contributeur
      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. 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.
      2. Contributeur
        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.
    2. 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. 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.
        1. Contributeur
          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.