Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
987 connectés 

  FORUM HardWare.fr
  Programmation
  C

  Question rapide programme en C !

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Question rapide programme en C !

n°1672082
ximothov
Posté le 16-01-2008 à 12:20:55  profilanswer
 

Voilà je suis en L2 et je dois creer un petit programme en C, cependant j'ai une erreur et je vois pas ou :( voici mon programme, quand je l'éxecute au moment d'entrer les valeurs de mon vecteur, il ne s'arrete plus alors qu'il devrait s'arreter quand i<dim, cepedant apparement il ne lis aucune valeur sur "dim" si quelqu'un pouvait me donner une piste svp :/ j'ai du mal avec les fonctions :o le probleme est au niveau de la fonction SAISIE

 

merci :(

 
 

#include <stdio.h>

 

typedef vect[10];

 

//Fonction taille du vecteur

 

int taille(int dim)
{
printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
printf("Taille de A : " );
scanf("%d",&dim);
}

 

//Fonction saisie

 

int saisie(int dim, vect A)
{
int i;
   
 for(i=0;i<dim;i++)
 {
 printf("Saisissez la valeur %d du vecteur \n",i);
 printf("Valeur %d : ",i);
 scanf("%d",&A[i]);
}}

 

// Fonction affichage

 

int affiche(int dim,vect A)
{
int i;
 printf("Valeurs des %d elements du vecteur : \n",dim);
 for(i=0;i<dim;i++)
 printf("%tA[i] = %d \n",A[i]);  
   
}

 

int main(void)
{
int dim;
vect A;
taille(dim);
saisie(dim,A);
affiche(dim,A);
printf("Taille de A : %d",dim);

 


system("pause" );  
return(0);    
}


Message édité par ximothov le 16-01-2008 à 12:27:26

---------------
http://www.youtube.com/profile?user=ximothov
mood
Publicité
Posté le 16-01-2008 à 12:20:55  profilanswer
 

n°1672115
gilou
Modérateur
Modzilla
Posté le 16-01-2008 à 12:47:01  profilanswer
 

Juste une illustration de l'erreur type que tu fais:

Code :
  1. int taille(int dim)
  2. {
  3. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  4. printf("Taille de A : " );
  5. scanf("%d",&dim);
  6. }


que tu appelles par taille(dim);
C'est un appel avec passage par valeur, donc ce n'est pas dim qui est transmis à la fonction taille, mais une copie. dim ne sera donc pas modifié par taille.
Si tu veux que dim soit modifié, il va falloir faire un passage par adresse:

Code :
  1. void taille(int *dimension) // evites de nommer le parametre comme la variable d'appel
  2.                                           // comme tu ne retournes rien, autant avoir un type retourné void
  3. {
  4. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  5. printf("Taille de A : " );
  6. scanf("%d", dimension);
  7. }


que tu vas appeller par taille(&dim);
C'est une copie de &dim, l'adresse de dim, qui est transmis à la fonction taille, et cette copie pointe donc, comme l'original sur dim. scanf va modifier ce sur quoi pointe son second parametre, donc scanf va modifier dim.
A+,
 
 


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --
n°1672128
ximothov
Posté le 16-01-2008 à 12:52:53  profilanswer
 


gilou a écrit :

Juste une illustration de l'erreur type que tu fais:

Code :
  1. int taille(int dim)
  2. {
  3. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  4. printf("Taille de A : " );
  5. scanf("%d",&dim);
  6. }


que tu appelles par taille(dim);
C'est un appel avec passage par valeur, donc ce n'est pas dim qui est transmis à la fonction taille, mais une copie. dim ne sera donc pas modifié par taille.
Si tu veux que dim soit modifié, il va falloir faire un passage par adresse:

Code :
  1. void taille(int *dimension) // evites de nommer le parametre comme la variable d'appel
  2.                                           // comme tu ne retournes rien, autant avoir un type retourné void
  3. {
  4. printf("Entrez la taille que vous souhaitez pour votre vecteur A\n" );
  5. printf("Taille de A : " );
  6. scanf("%d", dimension);
  7. }


que tu vas appeller par taille(&dim);
C'est une copie de &dim, l'adresse de dim, qui est transmis à la fonction taille, et cette copie pointe donc, comme l'original sur dim. scanf va modifier ce sur quoi pointe son second parametre, donc scanf va modifier dim.
A+,
 
 


 
Déjà merci de prendre du temps pour m'aider :jap:
 
alors j'ai demandé a un ami et au final j'ai a peu pres compris mes erreurs, je devais donc modifier ceci :
 


Au lieu de mettre :
 
int taille (int dim)
{
blabla
}
Il me fallait rajouter return(dim);


Idem pour les fonction int saisie(int dim, vect A) comme je ne retournais rien autant mettre void saisie(int dim, vect A)
 
et tout à la fin j'avais une erreur qui ne prenais pas en compte la dimension donc il me fallait definir "dim" en mettant "dim = taille(dim)"

Message cité 1 fois
Message édité par ximothov le 16-01-2008 à 12:53:17

---------------
http://www.youtube.com/profile?user=ximothov
n°1672150
gilou
Modérateur
Modzilla
Posté le 16-01-2008 à 13:19:03  profilanswer
 

ximothov a écrit :


 
Déjà merci de prendre du temps pour m'aider :jap:
 
alors j'ai demandé a un ami et au final j'ai a peu pres compris mes erreurs, je devais donc modifier ceci :
 


Au lieu de mettre :
 
int taille (int dim)
{
blabla
}
Il me fallait rajouter return(dim);



Comme tu ne fais rien avec la valeur retournée, si tu gardes ton appel taille(dim); ca ne marchera pas mieux.
A la limite, si ton appel est ainsi: dim = taille(dim); ca marchera car tu mettras la valeur retournée dans dim.
Mais la méthode de fonction avec passage par adresse est la plus courante dans une telle situation. Autant maitriser cette technique de base rapidement.
A+,


---------------
There's more than what can be linked! --    Iyashikei Anime Forever!    --  AngularJS c'est un framework d'engulé!  --

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  Question rapide programme en C !

 

Sujets relatifs
Modifier programme pour automatiser une tacheprogramme concernant les tableaux
Svchost.exe + droit systeme : Petite question...[SVN] question boulay?
question d'indentationProgramme impossible ?
Petit programme simple pour débutant VBAquestion de débutant que je suis
[fortran]Comment compiler puis executer un programme .f90?[CSS]question sur un avertissement du validateur
Plus de sujets relatifs à : Question rapide programme en C !


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR