Rechercher : dans
Par :

Entrée et sortie d'une fonction

Dernière réponse le 16 nov 2004 à 10:54:27 G-Boy, le 15 nov 2004 à 15:38:31 
 Signaler ce message aux modérateurs

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.

Meilleures réponses pour « Entrée et sortie d'une fonction » dans :
Flux d'Entrées/Sorties standard Voir Entrées/sorties Quand vous programmez, vous avez souvent besoin d’échanger des informations avec l’utilisateur, de consulter ou d’enregistrer des données. La gestion des entrées/sorties est donc particulièrement importante. En programmation...
Entrées/sorties : Les flux en C++ Voir Entrées/sorties : les flux en C++ 1. Ouvrir un fichier en lecture 1.1 Ouverture du fichier "donnees.txt" en lecture 1.2 Lecture du contenu de "donnees.txt" 2. Ouvrir un fichier en écriture 2.1 Ouverture du fichier "donnees.txt" en...
[Shell] Transferer des fichiers via ssh VoirSSH - Secure SHell Utilisation Informations complémentaires LOGICIELS Sous Linux/Unix Sous Windows Avertissement Utilisation SSH permet d'utiliser des pipelines de commandes, et d'utiliser des tubes d'entrées/sorties comme toute...
[Outlook Express] CnxMon.exe a rencontré un problème ... VoirCe problème intervenant chez les abonnées de Wanadoo provient d'une incompatibilité entre la fonctionnalité "Volet d'information" du logiciel Outlook Express et le Service Pack 2 de Windows (SP2). Pour y remédier deux solutions : Première...
Périphérique VoirNotion de périphérique On appelle « périphérique » un matériel électronique pouvant être raccordé à un ordinateur par l'intermédiaire de l'une de ses interfaces d'entrée-sortie (port série, port parallèle, bus USB, bus firewire, interface SCSI,...
Port série et port parallèle VoirIntroduction aux ports d'entrée-sortie Les ports d'entrée-sortie sont des éléments matériels de l'ordinateur, permettant au système de communiquer avec des éléments extérieurs, c'est-à-dire d'échanger des données, d'où l'appellation d'interface...
Le bus USB (Universal Serial Bus) VoirPrésentation du bus USB Le bus USB (Universal Serial Bus, en français Bus série universel) est, comme son nom l'indique, basé sur une architecture de type série. Il s'agit toutefois d'une interface entrée-sortie beaucoup plus rapide que les ports...

1

chatbotté, le 15 nov 2004 à 16:41:14

Void double(int a, int* b) {
*b = 2 * a; // b est IN et OUT, a n'est que IN
}

Répondre à chatbotté

2

blurk, le 16 nov 2004 à 00:21:50

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
¤

Répondre à blurk

3

philtrain, le 16 nov 2004 à 01:09:24

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+

Répondre à philtrain

4

juste en passant, le 16 nov 2004 à 01:14:48

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.

Répondre à juste en passant

5

 blurk, le 16 nov 2004 à 10:54:27

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



¤

Répondre à blurk
Collection CommentÇaMarche.net