Entrée et sortie d'une fonction

Fermé
G-Boy - 15 nov. 2004 à 15:38
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 - 16 nov. 2004 à 10:54
Bonjour à tous,
Je voudrai avoir un petit renseignement svp.
Dans une fonction en C ou ds tt language, comment peut-on dire que qu'un argument de la fonction est une entrée ou une sortie? Enfin quels sont les caracteristiques d'une entrée et d'une sortie.

Par exemple pour cette fonction:

// Sous programme contenant la fonction de saisie 

// Declaration des bibliothèque 

#include <stdio.h> 

// Parametrage pour les constantes en dur 

#define BIT_MAX 4 
#define ASCII_0 48 //Valeur ascii de 0 
#define ASCII_9 57 //Valeur ascii de 9 

// Déclaration des variables 

//int TEST=0; 
//int M = 0;    //1er compteur 
//int N = 0;    //2eme compteur 
//int VERIF = 1;  //Valeur de verification 
int SAISIE_CHIFFRE; // entier renvoyé en return de la fonction 
// Debut de la fonction de saisie 

int saisie( char SAISIE[],int TAILLE_TABLEAU 
, int *TEST,int *I, int *J, int *VERIF ) 
{ 
// Tant que VERIF n'est pas égale à 0 donc tant que la saisie n'est pas bonne 
// on reste dans la boucle qui demande de resaisir la valeur 

    while( *VERIF != 0) 
    { 
        printf( "\nEntrer votre chiffre %i :",(*J)+1); 
        gets( SAISIE ); 
        sscanf(SAISIE, "%i", &SAISIE_CHIFFRE); 

        if (SAISIE_CHIFFRE < 101) 
        { 
            for((*I) = 0; (*I) < 4;(*I)++) 
            { 
                if ( ( SAISIE[*I] >= ASCII_0 ) && ( SAISIE[*I] <= ASCII_9 ) ) 
            { 
                    VERIF = 0; 
                    return ( SAISIE_CHIFFRE ); 
                } 
                else 
                { 
                    (*VERIF)=1; 
                    printf("Votre saisie n'est pas bonne\n"); 
                    break; 
                } 
            } 
        } 
        else if ((*TEST!=1) && (SAISIE_CHIFFRE > 100)) 
        { 
            printf("Votre saisie n'est pas comprise entre 1 et 100.\n"); 
            *VERIF = 1; 
        } 
        else if ((*TEST=1) && (SAISIE_CHIFFRE > 999)) 
        { 
         printf("votre saisie n'est pa compris entre 101 et 999"); 
            *VERIF=1; 
        } 
        else if ((SAISIE_CHIFFRE>100)||(SAISIE_CHIFFRE<1000)) 
        { 
            return(SAISIE_CHIFFRE); 
            *VERIF=0; 
        } 
    } 
    return (0); 
} 
 



Merci.
A voir également:

5 réponses

void double(int a, int* b) {
*b = 2 * a; // b est IN et OUT, a n'est que IN
}
3
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
16 nov. 2004 à 00:21
bonjour
dans cette fonction,
int TAILLE_TABLEAU est une entrée, c'est à dire que la fonction ne peut pas modifier sa valeur.
tous les autres arguments peuvent servir d'entree sortie
puisque ce sont tous des pointeurs.
d'autre part, en bas de la fonction,
on peut voir return (0);
qui signifie que la fonction retourne 0 après son exécution.
caractéristique d'une entrée: tout type de variable
caractéristique d'une "sortie" toute variable passée par adresse ou pointeur

* mavariable est un pointeur
mavariable[] est un pointeur

mavariable désigne l'adresse de ce pointeur.
lors de l'appel d'une fonction (l'appel, pas la déclaration)
c'est l'adresse qui doit être passée comme argument,
le contenu de la variable pouvant éventuellement être modifié par la fonction.

quand une variable est déclarée comme valeur et non comme pointeur,
exemple : int a;

pour désigner son adresse, c'est &a

exemple:
-déclaration:
void mafonction(int *value);

-appel (avec int a, vu plus haut) :

mafonction (&a);

la valeur de a peut être modifiée par la fonction,
par la modification de *value

cordialement
¤
0
Utilisateur anonyme
16 nov. 2004 à 01:09
Bonjour blurk, bonjour G-Boy

int TAILLE_TABLEAU est une entrée, c'est à dire que la fonction ne peut pas modifier sa valeur

Pourquoi ?
(Rq: c'est une variable locale à la fonction, jamais utilisée)

* mavariable est un pointeur
mavariable[] est un pointeur


*mavariable est un pointeur (Ok)
mavariable[] est un tableau, non?

tous les autres arguments peuvent servir d'entree sortie
puisque ce sont tous des pointeurs.


mais char SAISIE[] est un tableau local de caractères, non?

Merci blurk pour tes précisions (je connais pas trop le C !)

a+
0
juste en passant
16 nov. 2004 à 01:14
le cas du passage de paramètre par valeur (c'est un IN) ou par adresse (pointeur IN/OUT), fait que dans le second cas, on peut rajouter const.Ainsi, le paramètre, même passé par adresse, est considéré comme un IN. Et le compilo ne manquera pas de le rappeler si tu essayes d'y toucher.

Et avec const, il y a pleins de déclinaisons...

int *p : pointeur variable et valeur variable
const int *p : pointeur variable et valeur constante
int * const p : pointeur constant et valeur variable
const int * const p : pointeur constant et valeur constante.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
blurk Messages postés 486 Date d'inscription vendredi 16 avril 2004 Statut Membre Dernière intervention 15 mars 2009 160
16 nov. 2004 à 10:54
bonjour philtrain

1
Dans la fonction saisie, le paramètre qui sera passé par valeur à taille tableau ne sera pas modifié par la fonction saisie, car saisie ne connait pas son adresse. TAILLE_TABLEAU peut être modifié à l'intérieur de "saisie", mais cela ne sortira pas de la fonction. C'est la règle en C: pour toucher à une variablepassée en paramète, il faut pouvoir connaitre son adresse.

2
Ca peut paraitre étonnant, mais entre tableau et pointeur,
c'est du pareil au même!

on peut déclarer indifférement:

char *chaine="un exemple  ";
chaine[10]='!';
printf("%s",chaine); // et on met un ! à la fin de chaine

char chaine[]="un exemple  ";
chaine[10]='?';
printf("%s",chaine); // et on met un ? à la fin de chaine



¤
0