Fonction scanf ???

Résolu
Bonjour,

Pour commencer, je programme en language c, le plus simple. J'utilise code::blocks. j'ai suivi quelques tutos (enfin... 1 tuto) sur le site du zéro, et je commence petit à petit à comprendre les bases. j'ai donc voulu créer mon premier logiciel, sans que personne ne me dise quoi faire ou comment faire. C'est un logiciel tout simple, qui fait semblant de collecter des informations sur vous pour vous dire, à la fin, qu'il se fout de votre gueule (que voulez-vous, j'avais besoin d'une idée :D)

Bref, je posais une question avec printf, suivi d'un scanf qui enregistrait la réponse, mais que je n'utilisait plus avec le programme, c'etait juste pour faire semblant. au début, tout a bien marché, il a fait une pose au premier scanf, j'ai écrit mon nom, j'ai appuyer sur entrée, tout marchait. Puis après, au lieu de m'afficher la question suivante et de s'arreter au scanf suivant, il a tout sauté et m'a tout mis d'un seul coup, sans que les scanfs soient appliqués... Voici le programme en question, quelqu'un peut m'aider ? :

#include <stdio.h>
#include <stdlib.h>

int main(int argc, char *argv[])
{
int age = 0, nom = 0, vide = 0;
double poids = 0;
printf("bonjour, je suis votre ordinateur, mais je suis aussi un medium. Je vais essayez de représentez une image de vous par rapport aux informations que vous me donner... Pour commencez, quel est votre nom ?");

scanf("%d", &nom);

printf("merci. Maintenant, quel est votre age ?");

scanf("%d", &age);

printf("merci. Maintenant, quel est votre poids ? Le programme etant anglais, veuillez mettre la virgule avec un point");

scanf("%lf", &poids);

printf("maintenant, je suis en mesure de dire votre taille, votre morphologie etc. Je parie que vous etes... appuyez n'importe ou puis sur entrée pour continuer");

scanf("%d", &vide);

printf("ah ah ! vous y avez cru, hein ? non plus serieusement, c'est mon premier programme, je vais quand meme pas vous sortir des calculs supercompliqués :D... Enfin, du moins, pas tout de suite :D En fait, je sais juste que vous avez %d et que vous faites %f", age, poids);

return 0;
}

4 réponses

  • Votes
  • Date
  • Date décroissante
  1. scanf("%d", &nom);

    %d , c'est un décimal.

    Si il attend un numérique et que tu lui donnes de l'alphabétique ca ne va pas marcher.

    Ici le tableau des valeurs % attendues par scanf :

    http://membres.multimania.fr/dancel/c/c60_40.htm

    A+

    ps:

    char nom[20]; 
    scanf("%c", &nom);  
        ou  
    scanf("%19s", &nom);  
    
    1. Contributeur
      scanf("%c", &nom); Tu vas juste rentrer un caractère avec ça, pas une chaîne.
      scanf("%19s", nom); /*il ne faut pas mettre d'esperluette devant, même si le compilateur ne râle pas*/
  2. Contributeur
    Bonjour,

    L'erreur provient bel et bien des scanf comme signalé par InformaticienSAP.
    Tu mets : int nom. Autrement dis, ton compilateur voudra que l'utilisateur tape un entier, alors que tu souhaites probablement du texte... Le scanf va donc être ignoré. Et le buffer clavier ne sera pas vidé...
    Repense bien le type de tes variables, et utilise les bons scanf.
    Par exemple, pour le nom, ça sera : char nom[20]; scanf("19s",nom);
    Cdlt,
    1. je veux bien te croire, mais ce n'est pas ce qui est écrit dans mon tutoriel : https://openclassrooms.com/fr/courses/19980-apprenez-a-programmer-en-c/14118-un-monde-de-variables

      va à l'onglet récupérer une saisie (ctrl+f récupérer une saisie)
      et là on me dit que c'est %lf pour les décimaux et %d pour les entiers.

      Et puis meme, télécharge le texte et eessaie de l'exécuter, tu verras qu'il ne me demande rien du tout, meme pas un décimal...
      1. Contributeur
        Attention à ne pas confondre décimal avec base décimal...
        %d, c'est pour les entiers décimaux (entrés en base 10) signés.
    2. Ouh là ! J'ai pas compris comment la corriger, mais j'ai trouvé ou etais l'erreur : je rentre du texte là ou le programme veut un chiffre, donc je fais tout sauter... Comment puis créer une variante ou je peux enregistrer du texte alors ? (je suis un débutant... excusez-moi :))
      1. Contributeur
        J'ai pas compris comment la corriger, mais j'ai trouvé ou etais l'erreur : je rentre du texte là ou le programme veut un chiffre, donc je fais tout sauter
        Beh oui, c'est ce que je viens de dire ^^.
        Pour la réponse, je te l'ai donné aussi dans le précédent post...
        Je te redonne : char nom[20]; scanf("19s",nom);
        Cdlt,
      2. oui mais ou dois-je le placer ?
      3. Contributeur
        Bah dans ton code...
        char nom[20]; à la place de ton int nom;
        scanf("%19s",nom); à la place de ton scanf("%d",&nom);
      4. Merci !
        Ca a enfin marché !
        Bonne journée tout le monde et merci pour votre aide !