Entrée et sortie d'une fonction
G-Boy
-
blurk Messages postés 487 Statut Membre -
blurk Messages postés 487 Statut Membre -
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:
Merci.
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:
- Entrée et sortie d'une fonction
- Fonction si et - Guide
- Remettre un pc en sortie d'usine - Guide
- Airpods 3 date de sortie - Guide
- Serveur entrant et sortant - Guide
- Fonction miroir - Guide
5 réponses
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
¤
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
¤
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+
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+
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.
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.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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:
¤
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
¤