Petit conseil, quand tu fais une fonction fais la en dehors du main, et quand tu as besoin de l'appeler tu le fais ca rend le code beaucoup plus lisible que ce soit pour toi que pour nous et n'hesite pas a indenter (je sais pas si c'est francais mdr) pour que ce soit plus simple de lecture
Ensuite si tu veux des réels ne met pas de int mais des float. Les int sont des entiers, ensuite, un tableau sans taille est un peu bizarre même si ça marche (en théorie)
Tant que tu n'auras pas donné une valeur à n, ton tableau peut avoir un nombre négatif d'élements, ou zéro élement, ou un nombre trop élévé pour pouvoir utiliser une VLA, ou encore avoir par hasard une taille "acceptable".
Autre problème, à part ceux déjà soulevés, dans ta boucle ligne 13, tu modifies n, qui est la seule variable à connaitre la taille du tableau.
Edit: ma réponse traitait du 1er code. Les post on été fait en même temps.
- Edité par edgarjacobs 12 septembre 2020 à 17:31:03
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent
Petit conseil, quand tu fais une fonction fais la en dehors du main, et quand tu as besoin de l'appeler tu le fais ca rend le code beaucoup plus lisible que ce soit pour toi que pour nous et n'hesite pas a indenter (je sais pas si c'est francais mdr) pour que ce soit plus simple de lecture
Ensuite si tu veux des réels ne met pas de int mais des float. Les int sont des entiers, ensuite, un tableau sans taille est un peu bizarre même si ça marche (en théorie)
Merci!! j' vais mettre des float mais maintenant je rencontre un nouveau problème (plus haut), et sans taille mon tableau ne marche pas...
Voilà mon ennoncé, je pensais qu'en mettant tableau[n] cela me ferait mon tableau de taille n
Comme dit si bien mon père:
Il faut laisser croire les béguines, elles sont spécialistes et payées pour
Donc, non: si n est sensé représenter la taille d'un tableau, il faut que la valeur de n soit clairement définie pour indiquer le nombre exact d'éléments que le tableau doit contenir.
De plus, lorsque l'on écrit un code proche de
int tableau[N]; // j'ai choisi le type int, mais cela fonctione
// avec tous les types
ce que l'on fait en réalité, c'est demander au compilateur de prévoir un espace suffisant dans le programme que pour représenter N éléments du type indiqués de manière contigüe en mémoire.
Il faut donc que le compilateur connaisse la valeur de N, ce qui n'est pas impossible, mais qui nous empêche d'écrire un code proche de
int N; // le nombre d'éléments requis
fprintf(stdout, "Combiens d'elements souhaitez-vous?");
fscanf(stdin,"%d",&N);
int tab[N];
car la valeur de N ne sera pas connue à la compilation, vu qu'elle ne sera fournie par l'utilisateur que lors de l'exécution.
(bon, C a, pendant "quelques temps" accepté la notion de VLA -- pour Variable Length Array -- qui nous autorisaient ce genre de pratique, mais sauf erreur de ma part, cette possibilité a été supprimée très rapidement).
Si bien que, si l'on veut pouvoir représenter un tableau d'élément dont on ne connait pas la taille au moment de la compilation, il faut impérativement passer par l'allocation dynamique de la mémoire au travers des fonctions malloc et autres. Le tout sans oublier de libérer la mémoire allouée (avec free) lorsqu'elle n'est plus nécessaire, ce qui nous amène à un code proche de
int N; // le nombre d'éléments requis
fprintf(stdout, "Combiens d'elements souhaitez-vous?");
fscanf(stdin,"%d",&N);
assert(N >0 && "la taille doit être exclusivement positive!");
int * tab = malloc(sizeof(int) * N);
if(!tab){
printf("erreur lors de l'allocation de memoire!");
abord();
}
/* on travaille avec le tableau */
free(tab);
Ce qui se conçoit bien s'énonce clairement. Et les mots pour le dire viennent aisément.Mon nouveau livre : Coder efficacement - Bonnes pratiques et erreurs à éviter (en C++)Avant de faire ce que tu ne pourras défaire, penses à tout ce que tu ne pourras plus faire une fois que tu l'auras fait
Il ne faudrait effectivement plus utiliser les VLA, il n'est plus qu'en option sur la norme C11 où il peut être non valide si la macro __STDC_NO_VLA__. est défini !
Erreur Bus que je ne trouve pas
× Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
× Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
On écrit "j'ai tort", pas "tord" qui est le verbe "tordre" à la 3ème personne de l'indicatif présent