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 :

[Débutant]


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut [Débutant]
    Plop @ll,

    Je précise, je suis débutant, au lycée, j'apprends le C pour me faire plaisir et donc je voudrais tout d'abord être sur que ça ne ferait pas "tâche" quelqu'un comme moi sur votre forum parce que, je n'ai ni prof, ni bouquin, seulement les cours de C du site Dévelopez.com

    Si ça ne vous dérange pas de répondre à mes questions ben j'y vais :


    D'aprés quelques codes que j'ai vu sur le forum, la fonction scanf(" ") permet de récupérer ce qui a été tapé juste avant , je voudrais savoir comment on la réaffiche, en fait j'ai fait ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
     
    #include <stdio.h>
    #include <stdlib.h>
    int main()
    {
        int x; /*ça c'est censé dire que x est en entier */
     
        printf("Entrez un nombre entier:");
     
        scanf("%i",&x);/*si vous pouviez m'expliquez ca que ça signifie*/
     
        printf("vous avez entrez (je cherche ce qu'il faut mettre là pour réafficher le nombre entier) comme nombre entier \n");
     
        system("pause");
    }
    Merci.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    Salut et bravo de ton courage.

    Ne te méprend pas nous sommes tous passer par là et n'ai aucune honte de tes lacunes.

    Scanf ("%i", &x) signifie que tu appelle la fonction scanf dans la librairie qui la contiens. %i signifie que tu attends un entier et qu'il sera rangé à l'adresse de x. (& => adresse).

    Cela est très peu sure mais pour l’instant, n'y prête pas attention.

    Ensuite pour afficher dans le printf, tu met a l'endroit ou tu veux une variable %i donc printf ("blaahblah %i blah blah",x). Cela veux dire que tu appelle la fonction printf de la Lib standard et que tu passes affiche blahblah x blah blah.

    En gros, la logique est la suivante : scanf et printf lisent la chaîne de caractères, lorsqu'il rentre un % cela signifie qu'il s'agi d'une partie variable. La liste d'argument qui suit cette chaîne de caractère est l'endroit ou est stocké la variable ou lu (selon que tu appelle scanf ou printf).

    Alexis

  3. #3
    Membre du Club
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    9
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 9
    Par défaut
    Cool, jte remercie beaucoup

  4. #4
    Rédacteur
    Avatar de Neitsa
    Homme Profil pro
    Chercheur sécurité informatique
    Inscrit en
    Octobre 2003
    Messages
    1 041
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chercheur sécurité informatique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 1 041
    Par défaut
    Bonjour,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int x; /*ça c'est censé dire que x est en entier */
    c'est bien ca

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    scanf("%i",&x);/*si vous pouviez m'expliquez ca que ça signifie*/
    Je quote la définition :

    int scanf ( const char * format [ , argument , ...] );

    La fonction scanf permet de faire une lecture formatée du flux standard d'entrée (le clavier par défaut).

    Elle lit les caractères en entrée, les interprète en concordance avec les spécifications de format décrites dans la chaîne format, et place les résultats dans les arguments arg.

    Pour pouvoir retourner les valeurs ainsi saisies, les arg doivent être obligatoirement des pointeurs.
    %i est donc le formateur, il indique comment est interprété l'argument qui suit. Ici, %i indique que l'on va lire un entier (int pour integer).

    &x signifie "adresse de x" (l'opérateur '&' est l'opérateur "adress of" soit "adresse de"). On indique par ce biais où ce situe x, ou plus exactement "à quelle adresse la variable x se situe".

    On aurait très bien pu utiliser un pointeur dans ce cas de figure :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
        int x; /*ça c'est censé dire que x est en entier */
    	int* px = &x;/* px vaut l'adresse de x*/
     
        printf("Entrez un nombre entier:");
     
        scanf("%i",px);
    revenons au code :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    printf("vous avez entrez (je cherche ce qu'il faut mettre là pour réafficher le nombre entier) comme nombre entier \n");
    la fonction printf à besoin d'un formateur elle aussi. Dans notre cas onpourra lui passer le formateur '%d' qui signifie que l'on affiche le nombre en décimal (base 10).

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        printf("vous avez entrez %d comme nombre entier \n",x);
    on aurait très bien pu imaginer ce code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
        printf("vous avez entrez %d (base 10) %x (base 16) comme nombre entier \n",x,x);
    Finalement, n'oublie pas que main doit retourner un type entier. Tu retourner 0, EXIT_SUCCESS ou EXIT_FAILURE.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
     
    #include <stdio.h>
    #include <stdlib.h>
     
    int main(void)
    {
        int x;
     
        printf("Entrez un nombre entier:");
     
        scanf("%i", &x);
     
        printf("vous avez entrez %d comme nombre entier \n", x);
     
        system("pause");
     
    	return EXIT_SUCCESS;
    }
    N'hésite pas à aller voir sur la page d'Emmanuel Delahaye et sur la FAQ de fr.comp.lang.c qui sont très bien faites :

    http://emmanuel-delahaye.developpez.com/
    http://www.isty-info.uvsq.fr/~rumeau/fclc/

    Bon courage pour la suite.

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 52
    Par défaut
    Bonjour
    je ne connais pas la fonction scanf() quelqu'un peu m'expliquer svp ou me donner une adresse de man, parce que moi pour lire sur l'entrée standard j'ai toujour utilisé read() sur le fd 0 et je voulais savoir les atouts de cette fonction sa pourrais m'eviter des lignes de codes surment inutile
    merci.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2005
    Messages
    22
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2005
    Messages : 22
    Par défaut
    man scanf

    je suis désolé

    edit: read c'est bien pour les unixoides, ca apprend à écrire correctement et comprendre TOUT.

    soit dit en passant on utilise STDIN_FILENO pour lire sur l'entrée standart ( sait on jamais que tu utilise un jours les pipes. )

  7. #7
    Membre éclairé Avatar de benjiprog
    Profil pro
    Étudiant
    Inscrit en
    Septembre 2005
    Messages
    302
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Septembre 2005
    Messages : 302
    Par défaut
    je ne connais pas la fonction scanf() quelqu'un peu m'expliquer svp ou me donner une adresse de man, parce que moi pour lire sur l'entrée standard j'ai toujour utilisé read() sur le fd 0 et je voulais savoir les atouts de cette fonction sa pourrais m'eviter des lignes de codes surment inutile merci.
    La fonction scanf est simple à utiliser sa syntaxe :
    scanf ("format",adresse de la variable);
    Par exemple si tu veux saisir un nombre entier que a déclarer int nb cela donnera scanf ("%d",&nb) %d signifiant que tu saisie une variable de type int et que tu va ranger cette valeur a l'adresse de ta variable nb (&nb).Il exite d'autre code de format pour les différants types en voici quelqu'un :
    %c char
    %u unsigned int
    %hd short int
    %hu unsigned short
    %ld long int
    %lu unsigned long
    %f float
    %lf double
    %s pour les chaines de caractères, mais je te conseille fortement de ne pas utiliser scanf pour la saisie de chaines de caratères mais plutôt fgets voici sa syntaxe fgets (chaine,sizeof(chaine),stdin) chaine etant la chaine de caractère déclarer et stdin le standard d'entrée qui est par défaut le clavier.

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    52
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 52
    Par défaut
    ok merci donc finalement je vais garder la fonction que j'ai fait pour lire l'entrée standard elle fonctionne tres bien... (tout en termcap le reve :p)

    par contre Alexis75014 tu m'interresse j'ai deja utiliser des pipes avec read et sa fonctionnais tres bien mais STDIN_FILENO je connaissait pas peut tu argumenter stp :-D, en quoi c'est utile pour les pipes??

  9. #9
    Membre Expert

    Homme Profil pro
    Inscrit en
    Juillet 2003
    Messages
    2 075
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ardennes (Champagne Ardenne)

    Informations forums :
    Inscription : Juillet 2003
    Messages : 2 075
    Par défaut
    Salut
    Comme l'a dit benji je pense qu'il serait meilleur d'utiliser fgets() emmanuel a bien détaillé cette fonction sur son site simplement je ne peux te donner l'url là j'arrive pas à avoir son site (j'espère qu'il est pas down ).
    L'avantage de fgets() étant qu'il te permet de préciser la taille de ce que tu veux lire en conséquence il permet d'éviter des "débordements"

Discussions similaires

  1. Débutant XML
    Par viny dans le forum XML/XSL et SOAP
    Réponses: 8
    Dernier message: 25/07/2002, 12h07
  2. [Kylix] Re Re: débutant sur Kylix et Linux.....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/06/2002, 22h53
  3. [Kylix] Le débutant en Kylix et Linux....
    Par Eclypse dans le forum EDI
    Réponses: 2
    Dernier message: 08/05/2002, 10h37
  4. Réponses: 3
    Dernier message: 07/05/2002, 16h06
  5. [HyperFile] 2 questions de débutant
    Par khan dans le forum HyperFileSQL
    Réponses: 2
    Dernier message: 29/04/2002, 23h18

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