IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

 C Discussion :

[Faisabilité ?] Résultat de la fonction scanf dans les paramètres d'une autre fonction


Sujet :

C

  1. #1
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut [Faisabilité ?] Résultat de la fonction scanf dans les paramètres d'une autre fonction
    Bonjour,

    Petite question :

    J'ai ça comme code de base.
    Nom : question 2.PNG
Affichages : 1100
Taille : 21,0 Ko

    Serait il possible d'imbriquer le résultat d'un choix (en demandant qu'elle est la largeur et la hauteur de notre rectangle) pour qu'ils prennent la place des deux nombres présents dans ma fonction "aireRectangle". j'aimerai garder mes deux fonctions "aireRectangle" et "main".

    Quelque chose comme çà:
    Nom : question 2.1PNG.PNG
Affichages : 1126
Taille : 28,7 Ko

    J'ai essayé plusieurs modulation de code sans succès (en utilisant seulement ce que je connais pour le moment, pas grand chose )
    Le seul qui me renvoie un résultat qui est toujours 0 c'est ce code :
    Nom : question 2.2PNG.PNG
Affichages : 1460
Taille : 24,2 Ko

  2. #2
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Bonjour
    Tu en es à ton second topic donc il est temps de te le dire, ici on met les codes dans les posts ce qui permet de les copier/coller, au lieu de copies d'écran qu'il faut recopier (c'est aussi précisé dans les règle). On aurait dû te le dire au premier mais là il n'y avait rien à corriger, pour celui-ci ce n'est pas pareil (en plus on est obligés d'ouvrir deux fenêtres sur ce topic pour avoir et la fenêtre de saisie de la réponse et une visu sur le code...)

    Citation Envoyé par babas37 Voir le message
    Le seul qui me renvoie un résultat qui est toujours 0 c'est ce code :
    scanf() est une fonction difficile et elle te posera bien des soucis avant que tu ne t'en sortes (probablement en évitant de l'utiliser). C'est bien souvent la fonction qu'on apprend en premier parce qu'elle permet d'intégrer directement la saisie ce qui permet alors de faire des TP plus réalistes... mais le paradoxe c'est qu'elle n'est pas faite pour un débutant mais on ne peut pas s'en passer quand on est débutant.
    scanf() signifie "ScanFormat", ce qui signifie que ce qu'elle attend doit avoir un certain format correspondant à ce qui a été décrit. Or ce qu'on tape au clavier est tout sauf formaté. Rien que le <return> que tu tapes pour valider ta saisie est déjà un caractère qui fout la zone quand on saisit plusieurs trucs différents à suivre (tente de faire saisir un int puis immédiatement ensuite une string et tu comprendras).
    Et (je ne sais pas si tu apprends seul ou bien en école), le pire ce sont quand les profs (qui sont bien souvent propulsés "profs de C" sans vraiment le connaitre à fond) ne sachant pas ce qui se passe, conseillent alors fflush(stdin) en préalable de toute saisie (ce remède étant pire que le mal car la fonction fflush() est faite pour finaliser des écritures en attentes et stdin ce n'est pas un tampon d'écriture mais de lecture ce qui donne alors un comportement indéterminé).

    Donc autant avec printf() on peut rester plus ou moins approximatif dans la description de ce qu'on veut afficher (en général la fonction arrive à retomber sur ses pieds en analysant les valeurs et en raccordant tout seul les bouts qui lui manquent parfois), autant scanf(), elle, impose une description précise et minutieuse de ce que tu veux saisir (parce que elle, elle n'a rien à analyser justement puisqu'elle va faire saisir un truc qui n'existe pas encore). Et si tu veux saisir un double, alors il faut le lui dire avec exactitude. Et "%f" ne décrit pas un double (8 octets) mais un float (4 octets). Donc elle prend ce que tu lui donnes, l'encode au format "float" et le stocke dans un double => tu obtiens 0.

    Donc ici remplace "%f" par "%lf" dans tes saisies et ça fonctionnera. Et pour tes soucis futurs (car avec scanf() tu en auras), affiche systématiquement ce que tu saisis pour être certain que ce qui est saisi est bien ce que tu as entré.
    Et si tu te forces à être aussi précis avec printf() c'est aussi bien (cela te facilitera fatalement les choses pour scanf()...)

    Code c : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    #include <stdio.h>
     
    double aire(double largeur, double hauteur) {
    	return largeur*hauteur;
    }
     
    int main() {
    	double largeur, hauteur;
    	printf("largeur? "); fflush(stdout);
    	scanf("%lf", &largeur);
    	printf("hauteur? "); fflush(stdout);
    	scanf("%lf", &hauteur);
    	printf("%lf\n", aire(largeur, hauteur));
    }
    (si tu veux voir comment j'ai mis du code dans ce post, tu cliques sur "répondre avec citation" ça te montrera le source de ma réponse)
    Et, contrairement à ce qui a été écrit dans ce post, je ne trouve pas que donner le même nom à des variables qui se trouvent dans deux fonctions distinctes nuise à la lecture du code.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  3. #3
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut
    Merci pour ton retour.

    J'ai bien pris en compte comment insérer du code dans un message, ça sera plus carré la prochaine fois

    j'apprend seul donc je n'ai pas encore vu comment fonctionne fflush().

    Lors de mes recherches, je n'ai pas étais assez pointilleux, j'ai omis de lire le petit encadré qui dit :

    "Attention, il y a une petite divergence de format entre printf et scanf !
    Pour récupérer un float, c'est le format"%f"qu'il faut utiliser.
    Mais pour le type double, c'est le format"%lf"."

    d'où mon erreur.

    Citation Envoyé par Sve@r Voir le message

    Et pour tes soucis futurs (car avec scanf() tu en auras), affiche systématiquement ce que tu saisis pour être certain que ce qui est saisi est bien ce que tu as entré.
    Et si tu te forces à être aussi précis avec printf() c'est aussi bien (cela te facilitera fatalement les choses pour scanf()...)
    Je ne suis pas sur de comprendre ce que tu veux dire par "affiche systématiquement ce que tu saisis pour être certain que ce qui est saisi est bien ce que tu as entré." ou alors je ne sais pas comment faire.

  4. #4
    Responsable Systèmes


    Homme Profil pro
    Gestion de parcs informatique
    Inscrit en
    Août 2011
    Messages
    18 302
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Gestion de parcs informatique
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Août 2011
    Messages : 18 302
    Par défaut
    Et, contrairement à ce qui a été écrit dans ce post, je ne trouve pas que donner le même nom à des variables qui se trouvent dans deux fonctions distinctes nuise à la lecture du code.
    Ce n’est qu'un avis personnel. Je trouve que quand on débute, ne pas utiliser le même nom de variable dans 2 fonctions différentes est plus facile. Mais le langage l'autorise.

    Les noms de variables doivent être d'abord parlants pour le développeur, puis ensuite pour un relecteur.
    Ma page sur developpez.com : http://chrtophe.developpez.com/ (avec mes articles)
    Mon article sur le P2V, mon article sur le cloud
    Consultez nos FAQ : Windows, Linux, Virtualisation

  5. #5
    Membre prolifique
    Avatar de Sve@r
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2006
    Messages
    12 845
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Février 2006
    Messages : 12 845
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par babas37 Voir le message
    Je ne suis pas sur de comprendre ce que tu veux dire par "affiche systématiquement ce que tu saisis pour être certain que ce qui est saisi est bien ce que tu as entré." ou alors je ne sais pas comment faire.
    Ben tu fais saisir "largeur" (scanf("%lf", &largeur)), ensuite tu affiches la largeur saisie (printf("largeur=[%lf]\n", largeur)) pour voir si ce qui est stocké dans la variable est bien ce que tu tapes au clavier.

    Citation Envoyé par chrtophe Voir le message
    Les noms de variables doivent être d'abord parlants pour le développeur, puis ensuite pour un relecteur.
    Ah là je suis d'accord
    Utiliser des noms de variables parlants et représentatifs de leurs rôles. Et ne pas s'inquiéter de savoir si ce même nom a ou n'a pas été déjà utilisé dans une autre fonction.
    Mon Tutoriel sur la programmation «Python»
    Mon Tutoriel sur la programmation «Shell»
    Sinon il y en a pleins d'autres. N'oubliez pas non plus les différentes faq disponibles sur ce site
    Et on poste ses codes entre balises [code] et [/code]

  6. #6
    Membre à l'essai
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Août 2022
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 32
    Localisation : France, Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance

    Informations forums :
    Inscription : Août 2022
    Messages : 6
    Par défaut
    Citation Envoyé par Sve@r Voir le message
    Ben tu fais saisir "largeur" (scanf("%lf", &largeur)), ensuite tu affiches la largeur saisie (printf("largeur=[%lf]\n", largeur)) pour voir si ce qui est stocké dans la variable est bien ce que tu tapes au clavier.
    Ah effectivement c'est simple est pas bête.

Discussions similaires

  1. Question optionnal dans les paramètres d'une fonction
    Par bsangoku dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 18/01/2013, 14h20
  2. Struct dans les paramètres d'une fonction
    Par qdaemon_fr dans le forum C
    Réponses: 3
    Dernier message: 20/04/2011, 14h41
  3. ArrayList initialisation dans les paramètres d'une fonction
    Par Mageni dans le forum Collection et Stream
    Réponses: 7
    Dernier message: 15/02/2010, 10h54
  4. Réponses: 21
    Dernier message: 18/11/2008, 14h36
  5. Réponses: 7
    Dernier message: 21/08/2008, 10h57

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo