none
Fonctionnement getchar ! RRS feed

  • Question

  • Bonjour tout le monde,

    je me suis remis tout récement dans la programmation (chose que je n'avais pas fête depuis au moins 20 ans). J'ai créer un petit soft tout simple pour comprendre le fonctionnement de la fonction "getchar", mais je ne comprends pas bien ce que réalise ces lignes de commande. si qqu'un peut m'expliquer ce qui se passe dans la bête lorsque celle-ci s'exécute :

    ligne utilisé :

    for (i = 0; (i < 80) && ((ch = getchar()) != EOF)
                             && (ch != '\n'); i++)
                buffer[i] = (char) ch;
        buffer[i] = '\0';
    	sscanf_s(buffer,"%f",&A);//scan keyboard entry

    le prog complet :

    // getchar.cpp : fichier projet principal.
    
    #include "stdafx.h"
    #include <stdio.h>
    #include <memory.h>
    using namespace System;
    
    int main()
    {
        Console::WriteLine("\nGetchar function\n"); //Title of Program
    
    	char buffer[81];
    
    	float A;//init value of A
    	Console::WriteLine("entrez la valeur A");
        int i, ch;
        for (i = 0; (i < 80) && ((ch = getchar()) != EOF)
                             && (ch != '\n'); i++)
                buffer[i] = (char) ch;
        buffer[i] = '\0';
    	sscanf_s(buffer,"%f",&A);//scan keyboard entry
    
    	float B;//init value of B
    	Console::WriteLine("\nentrez la valeur B");
        int j, hc;
        for (j = 0; (j < 80) && ((hc = getchar()) != EOF)
                             && (hc != '\n'); j++)
        buffer[j] = (char) hc;
        buffer[j] = '\0';
    	sscanf_s(buffer,"%f",&B);//scan keyboard entry
    
    	float C=0; //init value of B
    	C= B+A;
    
        printf( "\nla somme de %f et %f est de %f\n\a",A,B,C);
    
    	return 0;
    }

    j'ai pas mal cherché sur le net, mais beaucoup d'explication sur le codage, mais pas son fonctionnement( que fait la fonction FOR, que veut dire i<80, que veut dire &&...).

    Merci de vos infos et je suis preneur de toute bonne litérature sur le codage !


    Console::WriteLine("Richard")

    lundi 15 octobre 2012 15:55

Réponses

Toutes les réponses

  • La ligne qui vous pose problème est effectivement un peu complexe, et pas très lisible. On peut écrire exactement la même chose de la façon suivante 

        for (i = 0; i < 80; i++)
        {
            ch = getchar();
            if (ch == EOF || ch == '\n')
                break;
            buffer[i] = (char)ch;
        }
    
        sscanf_s(buffer,"%f",&A);//scan keyboard entry

    Vos autres questions trouvent leur réponse sur cette page par exemple : http://www.siteduzero.com/tutoriel-3-14189-apprenez-a-programmer-en-c.html#part_14188, notamment les chapitres 6 (conditions if) et 7 (boucle for).

    Idéalement il vous faudrait un livre sur le langage C. Le "Kernighan et Ritchie" est très bien : http://c.developpez.com/livres/

    • Marqué comme réponse Richard BVR mardi 16 octobre 2012 10:54
    lundi 15 octobre 2012 19:16
    Auteur de réponse
  • Bonjour Pierre,

    merci de votre réponse, pour info mon programme fonctionnait. c'était surtout un besoin de compréhension de la fonction, mais votre lien à l'air bien intéressant et je vais lire cela attentivement.

    concernant votre façon de le coder, elle est un peu plus simple à retenir.

    merci.


    Console::WriteLine("Richard")

    mardi 16 octobre 2012 07:28