Fonction scanf ???

Résolu/Fermé
gasasaaa Messages postés 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 - 25 avril 2011 à 09:10
gasasaaa Messages postés 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 - 25 avril 2011 à 15:07
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 jeudi 21 avril 2011 Statut Membre Dernière intervention 17 décembre 2011 20
Modifié par informaticienSAP le 25/04/2011 à 11:44
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2011 à 12:06
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2011 à 12:12
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 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 48
25 avril 2011 à 11:59
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2011 à 12:08
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 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 48
25 avril 2011 à 12:34
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 samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2011 à 12:40
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 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 48
25 avril 2011 à 13:38
oui mais ou dois-je le placer ?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 844
25 avril 2011 à 13:43
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 640 Date d'inscription lundi 31 mai 2010 Statut Membre Dernière intervention 14 septembre 2018 48
25 avril 2011 à 15:07
Merci !
Ca a enfin marché !
Bonne journée tout le monde et merci pour votre aide !
0