Langage C, fonction avec tableaux
Pineau
-
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
cchristian Messages postés 921 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je tente de programmer un logiciel (basique ... sur console) où l'utilisateur saisi des numéro d'intervention (pour une maintenance) et des indices de priorité pour ces interventions. Pour ne pas surcharger mon code j'aurais voulu mettre la boucle qui permet a l'utilisateur de saisir les valeurs à mettre dans les tableaux en fonction.
Le but étant de pouvoir m'en resservir ultérieurement dans un switch qui aura pour but de pouvoir ajouter des valeurs aux actuels tableaux.
Ma boucle est la suivante :
do
{
printf("Numero d intervention : ");
scanf("%d", &I[i]);
if (I[i]!=-1)
{
printf("Indice de priorite : ");
scanf("%d", &P[i]);
printf("\n\n\n");
}
i++;
}
while (I[i-1]!= -1);
Sachant que les tableaux sont : int I[250], P[250] et i mon indice.
J'avais fait une fonction comme ca mais ca ne fonctionne pas.
void initableau(int I[], int P[])
{
int i;
do
{
printf("Numero d intervention : ");
scanf("%d", &I[i]);
if (I[i]!=-1)
{
printf("Indice de priorite : ");
scanf("%d", &P[i]);
printf("\n\n\n");
}
i++;
}
while (I[i-1]!= -1);
}
Je ne m'y connais pas encore très bien dans ce domaine, ce qui explique les GROSSES et probables absurdités copiées plus haut.
Merci d'avance.
Je tente de programmer un logiciel (basique ... sur console) où l'utilisateur saisi des numéro d'intervention (pour une maintenance) et des indices de priorité pour ces interventions. Pour ne pas surcharger mon code j'aurais voulu mettre la boucle qui permet a l'utilisateur de saisir les valeurs à mettre dans les tableaux en fonction.
Le but étant de pouvoir m'en resservir ultérieurement dans un switch qui aura pour but de pouvoir ajouter des valeurs aux actuels tableaux.
Ma boucle est la suivante :
do
{
printf("Numero d intervention : ");
scanf("%d", &I[i]);
if (I[i]!=-1)
{
printf("Indice de priorite : ");
scanf("%d", &P[i]);
printf("\n\n\n");
}
i++;
}
while (I[i-1]!= -1);
Sachant que les tableaux sont : int I[250], P[250] et i mon indice.
J'avais fait une fonction comme ca mais ca ne fonctionne pas.
void initableau(int I[], int P[])
{
int i;
do
{
printf("Numero d intervention : ");
scanf("%d", &I[i]);
if (I[i]!=-1)
{
printf("Indice de priorite : ");
scanf("%d", &P[i]);
printf("\n\n\n");
}
i++;
}
while (I[i-1]!= -1);
}
Je ne m'y connais pas encore très bien dans ce domaine, ce qui explique les GROSSES et probables absurdités copiées plus haut.
Merci d'avance.
A voir également:
- Langage C, fonction avec tableaux
- Fonction si et - Guide
- Langage ascii - Guide
- Langage binaire - Guide
- Tableaux croisés dynamiques - Guide
- Fusionner deux tableaux excel - Guide
6 réponses
Bonjour,
Rien de grave :
//Tableaux
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
initableau(TAB1, TAB2) ;
____________________________________
Rien de grave :
//Tableaux
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
initableau(TAB1, TAB2) ;
____________________________________
/Passation des adresses de pointeurs. void initableau(int (*I), int (*P)) { //tu n'as pas initialisé i. Ca plantait d'entrée au scanf("%d", &I[i]); int i = 0; do { printf("Numero d intervention : "); scanf("%d", &I[i]); if (I[i]!=-1) { printf("Indice de priorite : "); scanf("%d", &P[i]); printf("\n\n\n"); } i++; } while (I[i-1]!= -1); }
Decidément je ne suis pas très doué :)
La fonction fonctionne pour le debut, mais pour l'utiliser dans mon switch je dois pouvoir changer la valeur de i.
Vous me l'avez fait initialiser a 0 dans la fonction, mais est il possible d'utiliser cette fonction en ayant un i different ?
Je m'explique : lorsque je sors de ma boucle j'utilise une variable que j'initialise à var=i-2. Cette variable me sert à trier mon tableau en fonction des valeurs des indices. Cependant par la suite l'utilisateur doit etre en mesure de pouvoir ajouter des interventions à la suite des tableaux déjà existants.
Pour ce faire j'ai besoin qu'en entrant dans ma fonction, i soit initialisé a i=var+1.
Est il possible lors de l'appel de fonction de faire en sorte que i prenne cette valeur ?
Merci beaucoup et désolé du dérangement.
La fonction fonctionne pour le debut, mais pour l'utiliser dans mon switch je dois pouvoir changer la valeur de i.
Vous me l'avez fait initialiser a 0 dans la fonction, mais est il possible d'utiliser cette fonction en ayant un i different ?
Je m'explique : lorsque je sors de ma boucle j'utilise une variable que j'initialise à var=i-2. Cette variable me sert à trier mon tableau en fonction des valeurs des indices. Cependant par la suite l'utilisateur doit etre en mesure de pouvoir ajouter des interventions à la suite des tableaux déjà existants.
Pour ce faire j'ai besoin qu'en entrant dans ma fonction, i soit initialisé a i=var+1.
Est il possible lors de l'appel de fonction de faire en sorte que i prenne cette valeur ?
Merci beaucoup et désolé du dérangement.
Bonjour,
Attention à bien "gérer" la variable i.
void initableau(int (*I), int (*P), int &i)
Eliminer l'initialisation de i.
//int i = 0;
int i = 0;
i = n....................;
initableau(TAB1, TAB2, i) ;
Ta manière de procéder pour passer les tableaux est tout aussi recevable que celle que j'ai codée. Elle est cependant déconseillée pour des questions de lisibilité qui peuvent induire une confusion quant à la nature execte de ce qui est effectivement passé (tableau ou pointeur).
P.S. J'ai défini i en tant que variable pointée &i de manière à ce que tu puisses récupérer sa valeur modifiée en sortie de initableau.
Cordialement.
Cchristian.
Attention à bien "gérer" la variable i.
void initableau(int (*I), int (*P), int &i)
Eliminer l'initialisation de i.
//int i = 0;
int i = 0;
i = n....................;
initableau(TAB1, TAB2, i) ;
Ta manière de procéder pour passer les tableaux est tout aussi recevable que celle que j'ai codée. Elle est cependant déconseillée pour des questions de lisibilité qui peuvent induire une confusion quant à la nature execte de ce qui est effectivement passé (tableau ou pointeur).
P.S. J'ai défini i en tant que variable pointée &i de manière à ce que tu puisses récupérer sa valeur modifiée en sortie de initableau.
Cordialement.
Cchristian.
Bonjour,
Je viens d'apprendre quelque chose que (forcément) j'ignorais, cette manière de procéder (int &i) est spécifique au C++. et tu es en C, alors si tu souhaites que j'essaie de mon côté de mettre en place l'équivalent (en C) dis-le moi.
Je viens d'apprendre quelque chose que (forcément) j'ignorais, cette manière de procéder (int &i) est spécifique au C++. et tu es en C, alors si tu souhaites que j'essaie de mon côté de mettre en place l'équivalent (en C) dis-le moi.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Fais un test chez toi, dis-moi si ça tourne, chez moi ça tourne mais je me méfie maintenant des incompatibilités C <=> C++;
____________________________________________
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
i = n ..................;
initableau(TAB1, TAB2, &i) ;
Fais un test chez toi, dis-moi si ça tourne, chez moi ça tourne mais je me méfie maintenant des incompatibilités C <=> C++;
void initableau(int (*I), int (*P), signed int *i) ; //Passation des adresses (pointeurs). void initableau(int (*I), int (*P), signed int *i) { //Pour des raisons que j'ignore il est préférable de ne pas utiliser // *i directement en tant qu'indice (résultats incohérents). int j = *i; do { printf("Numero d intervention : "); scanf("%d", &I[j]); if (I[j]!=-1) { printf("Indice de priorite : "); scanf("%d", &P[j]); printf("\n\n\n"); } j++; } while (I[j-1]!= -1); //restauration de *i avec la valeur de j pour utilisation dans la fonction appelante. *i = j; return ; }
____________________________________________
int TAB1 [32] = {0};
int TAB2 [32] = {0};
//Appel de la fonction
i = n ..................;
initableau(TAB1, TAB2, &i) ;
Par contre petit truc que je n'ai pas compris ...
Pourquoi doit on utiliser les pointeurs des tableaux dans la declaration des variables de la fonction ?
Merci encore.