A voir également:
- [C] Question générale sur un prog en C ...
- Robot prog - Télécharger - Édition & Programmation
- Comment calculer une moyenne générale sur 20 - Guide
- Ping défaillance générale - Forum Windows
- Virement emis logitel societe generale - Forum Réseaux sociaux
- Erreur générale d'e/s - Forum LibreOffice / OpenOffice
9 réponses
Bonjour,
La question que tu pose est celle de la zone d'existance d'une variable.
Une variable existe là ou tu la crée.
Si tu créé une variable dans une fonction, tu pourra y faire ce que tu veux avec tant que tu reste dans le corps de cette fonction (enfin dans le bloc ou tu as déclarer cette variable. Ex : dans un bloc while).
Mais si tu fais appel par la suite à cette variable dans une autre fonction ou un main et qu'une variable du même nom n'a pas été déclarée dans le bloc ou tu y fais appel, tu auras une erreur à la compilation comme quoi ta variable est inconnue. Suite à cela, si tu pense simplement devoir déclarer une variable du même nom pour pouvoir utiliser la variable déclarée dans une fonction précédente, cela ne fonctionnera pas, ou du moins avec une valeur différente. En effet, dans un bloc, c'est toujours la variable la moins "globale" qui prends le dessus et qui est manipulée par ton programme, à moins que tu spécifie. C'est d'ailleur pour cela qu'il faut toujours bien nommer ses variables afin de ne jamais avoir deux variables de même nom ! (Mise à part les compteur de boucle, et encore...).
Donc pour qu'une variable définie dans une autre soit prise en compte, il faut que tu passe cette variable en paramètre de fonction en fonction. Autre solution : les variables globales, qui sont définies en dehors de tout (généralement au début du fichier .c ou dans un fichier .h de définition). Les variables globales sont a utilisée dans le cadre de variables clés (par exemple les points de vies d'un personnage dans une classes Personnage), et c'est à manipulée avec précaution (attention à l'accès multiple si ces variables globales sont manipulées par plusieurs processus...).
Pour utiliser une variable dans une fonction et pouvoir récupérer cette dernière suite à un modification au sein de cette fonction depuis la fonction appellante, il faut utiliser les * (dans l'entete de la fonction qui modifie la valeur) et le & lors du passage en paramètre de la variable.
Bref, pour ce qui est d'information générale, succeptible d'être utilisée par plusieurs fonctions il est utile de les définir dans le niveau le plus haut, c'est à dire si deux fonctions utilisent cette variables (modification et affichage dans ton cas) et que ces deux fonctions sont appelées depuis une troisième (ici ton main), le mieux est de déclarer ta variable dans le main et de la passer en paramètre à chacune des deux fonctions (dont l'une devra avoir & afin de récupérer la nouvelle valeur de la variable et l'afficher correctement dans l'autre fonction).
Pour tester ce principe, test une première fois sans le '&' lors de l'appel à la fonction de modification, puis avec le '&'. La première fois ta valeur ne devrait pas apparaitre comme modifiée et la seconde si.
Bon courage pour la suite.
La question que tu pose est celle de la zone d'existance d'une variable.
Une variable existe là ou tu la crée.
Si tu créé une variable dans une fonction, tu pourra y faire ce que tu veux avec tant que tu reste dans le corps de cette fonction (enfin dans le bloc ou tu as déclarer cette variable. Ex : dans un bloc while).
Mais si tu fais appel par la suite à cette variable dans une autre fonction ou un main et qu'une variable du même nom n'a pas été déclarée dans le bloc ou tu y fais appel, tu auras une erreur à la compilation comme quoi ta variable est inconnue. Suite à cela, si tu pense simplement devoir déclarer une variable du même nom pour pouvoir utiliser la variable déclarée dans une fonction précédente, cela ne fonctionnera pas, ou du moins avec une valeur différente. En effet, dans un bloc, c'est toujours la variable la moins "globale" qui prends le dessus et qui est manipulée par ton programme, à moins que tu spécifie. C'est d'ailleur pour cela qu'il faut toujours bien nommer ses variables afin de ne jamais avoir deux variables de même nom ! (Mise à part les compteur de boucle, et encore...).
Donc pour qu'une variable définie dans une autre soit prise en compte, il faut que tu passe cette variable en paramètre de fonction en fonction. Autre solution : les variables globales, qui sont définies en dehors de tout (généralement au début du fichier .c ou dans un fichier .h de définition). Les variables globales sont a utilisée dans le cadre de variables clés (par exemple les points de vies d'un personnage dans une classes Personnage), et c'est à manipulée avec précaution (attention à l'accès multiple si ces variables globales sont manipulées par plusieurs processus...).
Pour utiliser une variable dans une fonction et pouvoir récupérer cette dernière suite à un modification au sein de cette fonction depuis la fonction appellante, il faut utiliser les * (dans l'entete de la fonction qui modifie la valeur) et le & lors du passage en paramètre de la variable.
Bref, pour ce qui est d'information générale, succeptible d'être utilisée par plusieurs fonctions il est utile de les définir dans le niveau le plus haut, c'est à dire si deux fonctions utilisent cette variables (modification et affichage dans ton cas) et que ces deux fonctions sont appelées depuis une troisième (ici ton main), le mieux est de déclarer ta variable dans le main et de la passer en paramètre à chacune des deux fonctions (dont l'une devra avoir & afin de récupérer la nouvelle valeur de la variable et l'afficher correctement dans l'autre fonction).
Pour tester ce principe, test une première fois sans le '&' lors de l'appel à la fonction de modification, puis avec le '&'. La première fois ta valeur ne devrait pas apparaitre comme modifiée et la seconde si.
Bon courage pour la suite.
Question sur la portée des variables (kij_82 fait également, et très justement, reférence à la "Zone d'existence des variables", ce qui revient sensiblement au même ).
Ce questionnement complexe peut se reformuler comme suit :
Quand je déclare une variable quelque part dans mon code, cette variable est elle accessible partout dans mon code, et si ce n'est pas le cas, quelles sont les règles qui régentent la portée des variables ?
Pour répondre à cette question fort complèxe je te recommande quelques lectures :
c.f. : -- cppvar --
Plus complet : http://www.idris.fr/data/cours/lang/c/
Surtout je te recommande la lecture des livres. Sache que c'est une question que tous les programmeurs se posent et se reposent des milliers de fois aux cours de l'écriture d'un programme. Si tu comptes programmer, il est nécessaire d'approfondir la question.
Cordialement,
Tristesobre.
Ce questionnement complexe peut se reformuler comme suit :
Quand je déclare une variable quelque part dans mon code, cette variable est elle accessible partout dans mon code, et si ce n'est pas le cas, quelles sont les règles qui régentent la portée des variables ?
Pour répondre à cette question fort complèxe je te recommande quelques lectures :
c.f. : -- cppvar --
Plus complet : http://www.idris.fr/data/cours/lang/c/
Surtout je te recommande la lecture des livres. Sache que c'est une question que tous les programmeurs se posent et se reposent des milliers de fois aux cours de l'écriture d'un programme. Si tu comptes programmer, il est nécessaire d'approfondir la question.
Cordialement,
Tristesobre.
Merci beaucoup.
J'ai une autre question :
Je crée un tableau dynamique à 2 (respectivement 3) dimensions, comment le passer en paramètre d'une fonction afin d'allouer l'espace ? afin de l'initialiser ? afin de le remplir ?
Merci...
J'ai une autre question :
Je crée un tableau dynamique à 2 (respectivement 3) dimensions, comment le passer en paramètre d'une fonction afin d'allouer l'espace ? afin de l'initialiser ? afin de le remplir ?
Merci...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Voici un menu :
Je ne comprends pas, il m'indique : 'TermTab undeclared (first used in this function ...
Je ne vais pas déclarer mon tableau ds mon menu ?
Je suis bien obliger de lui mettre TermTab en parametres afin qu'il le remplisse ...
Aidez-moi svp ...
menu_1(){ int choix_1; do { printf("\n\t\t Menu 1 :\n\n"); printf("\nTapez 1 afin de commencer\n"); printf("\nTapez Q pour QUITTER ou bien pressez la touche Echap\n"); printf("\n\n\n Votre choix : "); choix_1 = getch(); switch (choix_1) { case '1': printf("\nChoix 1\n");system("cls");apartirdeTermFic(TermTab);apartirdeProdFic();system("cls");menu_2(); case 27: printf("\n\n\nTouche Echap\n");sleep(300);break; case 'Q': printf("\n\n\nSortie ...\n");sleep(300);break; default: printf("\n\n\nErreur de saisie\n");sleep(300); } system("cls"); } while (choix_1!=27 && choix_1!='Q'); }
Je ne comprends pas, il m'indique : 'TermTab undeclared (first used in this function ...
Je ne vais pas déclarer mon tableau ds mon menu ?
Je suis bien obliger de lui mettre TermTab en parametres afin qu'il le remplisse ...
Aidez-moi svp ...
Termtab n'est pas connu dans ta fonction. Termtab est une variable locale. Ce que tu fais, tu fais passer ton tableau termTab en argument de ton menu_1();
mais comment passer mon tableau dyn à 2 dim du main vers sa fonction de 'remplissage' puis de nouveau dans le main puis vers sa fonction d'affichage ?