Fonction scanf ???

Résolu
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   -  
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   -
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;
}









A voir également:

4 réponses

informaticienSAP Messages postés 119 Date d'inscription   Statut Membre Dernière intervention   20
 
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
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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*/
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   48
 
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...
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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.
0
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   48
 
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 :))
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
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,
0
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   48
 
oui mais ou dois-je le placer ?
0
fiddy Messages postés 11069 Date d'inscription   Statut Contributeur Dernière intervention   1 846
 
Bah dans ton code...
char nom[20]; à la place de ton int nom;
scanf("%19s",nom); à la place de ton scanf("%d",&nom);
0
gasasaaa Messages postés 644 Date d'inscription   Statut Membre Dernière intervention   48
 
Merci !
Ca a enfin marché !
Bonne journée tout le monde et merci pour votre aide !
0