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 :

variable non déclarée


Sujet :

C

  1. #1
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut variable non déclarée
    Bonjour,

    Voici un sous-programme permettant d'entrer un temps dans une variable de typre struct temps et un sous programme sortie() permettant de sortir à l'écran un temps stocké dans une variable de type structure temps

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /*devoir numéro 6 exercice 2A*/
     
    #include<stdio.h>
     
    	/*définition de la structure pour la représentation du temps*/
    	struct t {
    		int heures;
    		int minutes;
    		int secondes;
    	};
     
    	void entree(void)
    	{
    		struct t *temps;
    		int tps;
     
    		do
    		{
    			tps=1;
    			printf("entrer un temps separe par des espaces, svp\n");
    			scanf("%d%d%d",&temps->heures,&temps->minutes,&temps->secondes);
     
    			if(temps->heures>23||temps->heures<0)
    			{
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->minutes>59||temps->minutes>0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->secondes>59||temps->secondes<0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
     
    		}while(temps==0);
    	}
     
    	void sortie(void) 
    	{
    		struct t *temps;
    		printf("%2.2d:%2.2d:%2.2d\n",temps->heures,temps->minutes,temps->secondes);
    	}
     
    	int main()
    	{
    		entree();
    		sortie();
     
    		return 0;
    	}
    ça me dit que la variable temps n'est pas déclarée à la compilation ?
    Je ne comprends pas pourquoi ?

  2. #2
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Puet être parce que ton compilateur est très fort et qu'il se rend compte que derrière ton pointeur *temps, il n'y a pas d'initialisation et donc que ce pointeur est fou et qu'il refuse de l'utiliser.
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  3. #3
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Je le compile sur visual et sur code blocks et les 2 refusent de l'exécuter

  4. #4
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    et moi, cela me sort 2 warning sur les 2 problèmes que je t'ai signalé plus haut
    c:\temp\console.cpp(27) : warning C4700: variable locale 'temps' non initialisée utilisée
    c:\temp\console.cpp(51) : warning C4700: variable locale 'temps' non initialisée utilisée
    Je suis sous Visual Studio 2005
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  5. #5
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    moi aussi je suis sous VS 2005 mais ça me met un run time check failure et je ne peux pas exécuter le programme ?

    En fait c'est un exercice que je dois faire et j'ai demandé la correction et je vois qu' il a été réalisé avec le compilateur Eterm . Je ne connais pas ce compilateur et cet exercice ne peut être compilé sur un autre compilateur ?

  6. #6
    Expert confirmé

    Inscrit en
    Août 2006
    Messages
    3 942
    Détails du profil
    Informations forums :
    Inscription : Août 2006
    Messages : 3 942
    Points : 5 654
    Points
    5 654
    Par défaut
    Bie,

    Quel que soit ton compilateur, le fait est que tu utilises - mal, en plus - un pointeur non initialisé.
    Si les cons volaient, il ferait nuit à midi.

  7. #7
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Alors comment utiliser le pointeur et aussi comment l'initialiser ?

  8. #8
    Rédacteur

    Avatar de ram-0000
    Homme Profil pro
    Consultant en sécurité
    Inscrit en
    Mai 2007
    Messages
    11 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Consultant en sécurité
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mai 2007
    Messages : 11 517
    Points : 50 367
    Points
    50 367
    Par défaut
    Pour ne pas trop toucher à ton code, je te propose les modif suivantes

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void entree(void)
    	{
    		struct t tempo;
    		struct t *temps = &tempo;
    et
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    void sortie(void) 
    	{
    		struct t tempo;
    		struct t *temps = &tempo;
    C'est pas très beau mais c'est ce qui permet de ne pas trop toucher au reste du code
    Raymond
    Vous souhaitez participer à la rubrique Réseaux ? Contactez-moi

    Cafuro Cafuro est un outil SNMP dont le but est d'aider les administrateurs système et réseau à configurer leurs équipements SNMP réseau.
    e-verbe Un logiciel de conjugaison des verbes de la langue française.

    Ma page personnelle sur DVP
    .

  9. #9
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Il faut que je change mon code comme ça ? ça ne fonctionne pas ainsi ça me met des résultats totalement erronés ?

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    /*devoir numéro 6 exercice 2A*/
     
    #include<stdio.h>
     
    	/*définition de la structure pour la représentation du temps*/
    	struct t {
    		int heures;
    		int minutes;
    		int secondes;
    	};
     
    	void entree(void)
    	{
    		struct t tempo;
    		struct t *temps = &tempo;
     
    		int tps;
     
    		do
    		{
    			tps=1;
    			printf("entrer un temps separe par des espaces, svp\n");
    			scanf("%d%d%d",&temps->heures,&temps->minutes,&temps->secondes);
     
    			if(temps->heures>23||temps->heures<0)
    			{
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->minutes>59||temps->minutes<0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->secondes>59||temps->secondes<0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
     
    		}while(tps==0);
    	}
     
    	void sortie(void) 
    	{
    		struct t tempo;
    		struct t *temps = &tempo;
     
    		printf("%2.2d:%2.2d:%2.2d\n",temps->heures,temps->minutes,temps->secondes);
    	}
     
    	int main()
    	{
    		entree();
    		sortie();
     
    		return 0;
    	}

  10. #10
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Je le compile sur visual et sur code blocks et les 2 refusent de l'exécuter
    Donc, ce n'est pas à la compilation que ça bloque, mais à l'exécution. En gros, comme te l'as dit ram-0000, tes pointeurs existent mais pointent vers le vide. Si tu compiles en « mode debug » ou quelque chose d'assimilé dans un environnement de développement, celui-ci est capable de rattrapper l'erreur et de te le dire. En production, ça se traduirait par une segfault.

    Citation Envoyé par chicabonux Voir le message
    Il faut que je change mon code comme ça ? ça ne fonctionne pas ainsi ça me met des résultats totalement erronés ?
    C'est normal, tes variables « temps » (et désormais « tempo ») sont déclarées en local dans tes deux fonctions « entree » et « sortie ». Si elles portent le même nom, cela reste deux instances complètement distinctes l'une de l'autre.

    Ce qu'il faut faire si tu veux les faire communiquer, c'est déclarer une structure « temps » dans ta fonction main() et passer son adresse à chacune de tes fonctions « entree » et « sortie ». Pour cela, il faut que leur paramètre ne soit plus void mais un pointeur vers une instance valide de la structure « temps » (celle-là même que tu déclares dans main).

  11. #11
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    ça serait sans doute une solution (et encore je ne sais pas comment faire ça : )
    il faut que leur paramètre ne soit plus void mais un pointeur vers une instance valide de la structure « temps »
    Mais dans l'énoncé de mon exercice ça me dit :

    fiait simplement pour tester les sous programmes, le programme principal sera le plus simple possible :
    -déclarations diverses
    -entrée d'un temps du clavier : appel de entree()
    -sortie de ce temps à l'écran : appel de sortie()

  12. #12
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Mais dans l'énoncé de mon exercice ça me dit :

    Citation:
    fiait simplement pour tester les sous programmes, le programme principal sera le plus simple possible :
    -déclarations diverses
    -entrée d'un temps du clavier : appel de entree()
    -sortie de ce temps à l'écran : appel de sortie()
    Renseigne-toi auprès de ton prof.

    À priori, j'interpréterais les parenthèses comme étant les signes d'un appel aux fonctions, pas comme le fait que celles-ci ne doivent attendre aucun paramètre. Si c'est le cas, alors il est possible qu'il attende de toi que tu utilises une variable globale et ça, c'est mal.

    Au pire, tu peux toujours « tricher » en appelant au sein d'« entree » et « sortie » une troisième fonction qui, elle, te renvoie un pointeur vers une structure déclarée en mémoire. Ça se fait souvent, mais ça ne va pas dans le sens de la simplification de ton programme.

  13. #13
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Et surtout je ne sais pas comment faire ça

    Tu pourrais me montrer ?

  14. #14
    Modérateur
    Avatar de Obsidian
    Homme Profil pro
    Développeur en systèmes embarqués
    Inscrit en
    Septembre 2007
    Messages
    7 369
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Développeur en systèmes embarqués
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2007
    Messages : 7 369
    Points : 23 623
    Points
    23 623
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Et surtout je ne sais pas comment faire ça Tu pourrais me montrer ?
    Encore une fois : renseigne-toi d'abord auprès de ton professeur pour savoir s'il veut que tu utilises une globale ou si tu dois utiliser des paramètres. À mon avis, même s'il veut que le programme principal ne contienne que des appels à tes deux fonctions, je penche pour la deuxième option.

    Ce serait dommage de rater ton projet si près du but simplement à cause d'une assertion de départ qui n'aurait jamais été vérifiée.

  15. #15
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    J'ai un exercice préléminaire qui ne s'exécute pas non plus !

    énoncé :

    Ecrire une fonction qui permet d'entrer des caractères du clavier dans un tableau t, y compris espaces et tabulations, ce que ne peut faire l'instruction scanf("%s",t); .L'entrée des caractères se termine par un retour chariot .La fonction sera définie comme suit :

    lecture(t)
    char *t;
    {
    ...à écrire
    }

    On prendra le programme suivant pour tester la fonction :

    #include<stdio.h>
    main()
    {
    char t[100];
    lecture(t);
    printf("%s",t);
    }

    Le corrigé ne s'exécute pas

    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
    19
    20
    21
    22
    23
    24
    25
    26
    #include<stdio.h>
     
    /*fonction permettant la récupération et le stockage d'une phrase*/
    /*qui sera par la suite utilisée pour afficher la phrase*/
     
    void lecture(t)
    char *t;
    {
     
     
    	while((*t=getchar())!='\n')
    		t++;
    }
     
    int main()
    {
    	char t[100];
     
    	printf("Entrez une phrase (moins de cent caracteres)\n");
    	lecture(t);
     
    	printf("%s",t);
     
     
    	return 0;
    }
    ça me donne ça comme résultat à la compilation

    [img=http://img13.imageshack.us/img13/5928/ex1dev6.th.jpg]

  16. #16
    Invité(e)
    Invité(e)
    Par défaut
    Bonjour,
    il faut ajouter une fin de chaine :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void lecture(t)
    char *t;
    {
        while((*t=getchar())!='\n')
           t++;
        *t = '\0';
    }
    EDIT
    On aurai aussi pu initialiser t à sa création :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int main()
    {
        char t[100] = "";
        ...
    /EDIT
    au passage, on ne déclare plus des fonction C comme tu le fais. On peut écrire aujourd'hui :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void lecture(char *t)
    {
        ...
    }
    int main(void) 
    {
        ...
        return 0;
    }

  17. #17
    gl
    gl est déconnecté
    Rédacteur

    Homme Profil pro
    Inscrit en
    Juin 2002
    Messages
    2 165
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 45
    Localisation : France, Isère (Rhône Alpes)

    Informations forums :
    Inscription : Juin 2002
    Messages : 2 165
    Points : 4 637
    Points
    4 637
    Par défaut
    Citation Envoyé par chicabonux Voir le message
    Le corrigé ne s'exécute pas

    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
    19
    20
    21
    22
    23
    24
    25
    26
    #include<stdio.h>
     
    /*fonction permettant la récupération et le stockage d'une phrase*/
    /*qui sera par la suite utilisée pour afficher la phrase*/
     
    void lecture(t)
    char *t;
    {
     
     
    	while((*t=getchar())!='\n')
    		t++;
    }
     
    int main()
    {
    	char t[100];
     
    	printf("Entrez une phrase (moins de cent caracteres)\n");
    	lecture(t);
     
    	printf("%s",t);
     
     
    	return 0;
    }
    ça me donne ça comme résultat à la compilation

    [img=http://img13.imageshack.us/img13/5928/ex1dev6.th.jpg]
    Ce qui est normal, nul part dans le code tu ne termines la chaîne de caractères par un '\0'. printf() affiche donc tout ce qu'il trouve en mémoire jusqu'à rencontrer un '\0'.

    Ceci devrait résoudre ce problème:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    void lecture(char *t)
    {
    	while((*t=getchar())!='\n')
    		t++;
    	*t = '\0'
    }
    Par contre, ton code présente un autre problème grave, il n'y a aucune vérification de la taille du tableau.

  18. #18
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    Merci pour votre aide . Avec la fin de chaîne le programme s'exécute bien .

    Je reviens à l'autre exercice

    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
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    /*devoir numéro 6 exercice 2A*/
     
    #include<stdio.h>
     
    	/*définition de la structure pour la représentation du temps*/
    	struct t {
    		int heures;
    		int minutes;
    		int secondes;
    	};
     
    	void entree(void)
    	{
    		struct t *temps;
    		int tps;
     
    		do
    		{
    			tps=1;
    			printf("entrer un temps separe par des espaces, svp\n");
    			scanf("%d%d%d",&temps->heures,&temps->minutes,&temps->secondes);
     
    			if(temps->heures>23||temps->heures<0)
    			{
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->minutes>59||temps->minutes>0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
    			else if(temps->secondes>59||temps->secondes<0)
    			{		
    				printf("temps invalide, recommencer la saisie\n");
    				tps=0;
    			}
     
    		}while(temps==0);
    	}
     
    	void sortie(void) 
    	{
    		struct t *temps;
    		printf("%2.2d:%2.2d:%2.2d\n",temps->heures,temps->minutes,temps->secondes);
    	}
     
    	int main()
    	{
    		entree();
    		sortie();
     
    		return 0;
    	}
    Je n'y comprends strictement rien et je ne vois pas comment faire ce qu'on me propose

    À priori, j'interpréterais les parenthèses comme étant les signes d'un appel aux fonctions, pas comme le fait que celles-ci ne doivent attendre aucun paramètre. Si c'est le cas, alors il est possible qu'il attende de toi que tu utilises une variable globale et ça, c'est mal.

    Au pire, tu peux toujours « tricher » en appelant au sein d'« entree » et « sortie » une troisième fonction qui, elle, te renvoie un pointeur vers une structure déclarée en mémoire. Ça se fait souvent, mais ça ne va pas dans le sens de la simplification de ton programme.
    Vous pouvez m'expliquer un petit peu ?

  19. #19
    Membre régulier Avatar de chicabonux
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    329
    Détails du profil
    Informations personnelles :
    Âge : 56
    Localisation : France, Oise (Picardie)

    Informations forums :
    Inscription : Mai 2007
    Messages : 329
    Points : 73
    Points
    73
    Par défaut
    En fait je ne sais pas comment initialiser un pointeur ou créer la 3ème fonction ?

  20. #20
    Expert éminent sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Points : 13 926
    Points
    13 926
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void entree(void)...
    void sortie(void)...
    Ces deux fonctions agissent sur une grandeur notée struct t *temps. C'est donc une grandeur dont dépend le fonctionnement de ces fonctions. En toute logique, elle devrait être un paramètre de la fonction, pas une variable locale.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    void entree(struct t *temps)...
    void sortie(struct t *temps)...
    Le main devient alors :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    int main()
    {
      struct t temps; // création d'une variable struct t
      entree(&temps); // passage de son adresse aux fonctions
      sortie(&temps);
      return 0;
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 6
    Dernier message: 31/12/2008, 10h59
  2. Option Explicit et erreur variable non déclarée
    Par petitours dans le forum VBA Access
    Réponses: 2
    Dernier message: 23/04/2008, 15h38
  3. [Design] Erreur variable non déclarée ou non assignée
    Par Arnard dans le forum Visual Studio
    Réponses: 3
    Dernier message: 19/12/2007, 17h53
  4. Problème de variable non déclarée
    Par jncoffy dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 24
    Dernier message: 06/06/2007, 11h01
  5. variable non déclarée?
    Par carole8 dans le forum C
    Réponses: 15
    Dernier message: 30/11/2006, 16h13

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