Bonjour, Je commence tout juste la programmation en C via le cours d'openclassroom et je suis bloqué sur un exercice où il faut copié un premier tableau dans un autre.
Mais lorsque je compile la console m'affiche ceci :
[4][4][6][8][10]
[1550245031][-2][6356712][1975414765][4200832]
je ne comprends pas où est mon erreur même apres avoir parcouru les differents sujet du forum en lien avec cet exercice.
#include <stdio.h>
#include <stdlib.h>
void copie_tableau(int tabOriginal[] , int tabCopie[] , int tailletableau);
int main()
{
int tabOriginal[5] = {4,4,6,8,10};
int tabCopie[5] ;
int i=0;
for(i=0 ; i<5 ; i++)
printf("[%d]",tabOriginal[i]);
printf("\n");
void copie_tableau(int tabOriginal[] , int tabCopie[] , int tailletableau);
for(i=0 ; i<5 ; i++)
printf("[%d]",tabCopie[i]);
return 0;
}
void copie_tableau(int tabOriginal[] , int tabCopie[] , int tailletableau)
{
int i =0 ;
for(i=0 ; i<tailletableau ; i++)
tabCopie[i] = tabOriginal[i];
}
Salut, ligne 17 tu n'appelles la fonction, tu la déclares (comme à la ligne 4), tu dis juste qu'elle existe... ça ne sert à rien.
Il faut remplacer la ligne 17 par :
copie_tableau(tabOriginal,TabCopie,5);
Et donc les valeurs que tu obtiens, de TabCopie sont "n'importe quoi" car il peut y avoir n'importe quoi dans des variables non initialisées (l'erreur est de croire qu'il y a des 0 systématiquement)
A la longue, le problème ne se pose pas vraiment pour les programmes qui atteignent une certaine taille (*) et se retrouvent découpés en fichiers sources, correspondant à des modules, compilés séparément.
Les déclarations se retrouvent dans le fichier d'entete, et sont inclus dans le code du module.
A part ça, déclarer les fonctions avant d'utiliser, c'est dans la logique du langage (compilation en une passe), comme en Pascal, mais dans le Kernighan et Ritchie, ils ont utilisé les prototypes dès les premiers exemples
(*) et/ou pour qui on veut avoir des tests unitaires, lancés par un autre main.
C'est différent parce que C a été conçu pour être compilable en une seule passe. Si on veut vérifier qu'on appelle une fonction avec les paramètres du bon type etc, il faut que la déclaration précède les appels.
Même chose en Pascal, où on fait un forward pour prédéclarer. Ou C++.
FORTRAN, ou JAVA, autre histoire,
- Edité par michelbillaud 18 février 2020 à 7:42:35
J'ai toujours (ou presque) placé mes fonctions avant le main et dans le bon ordre et je n'ai rarement été obliger d'utiliser des déclarations.
À moins qu'il y ait des appels récursifs croisés.
Je remarque que les nouveaux qui viennent sur ce site placent la définition des fonctions après le main et les déclarent au début.
Quel est le meilleur usage?
Tant qu'il y a concordance entre la déclaration et la définition, ce n'est pas si mal.
Je fais comme toi, je place mes fonctions avant.
Je parle bien entendu de toutes les sous fonctions qui ne méritent pas d'avoir une déclaration dans un .h
Dans le .h je mets le ou les points d'entrée et dans le .c qui va avec, le point d'entrée est en bas, et toutes les fonctions locales qu'il appelle sont au dessus en ce qui me concerne.
Après, en C++ c'est un peu différent car avec les classes, il faut tout déclarer dans les hpp.
Mais j'ai gardé l'habitude de mettre mes points d'entrée en bas des fichiers .c ou .cpp
Ca ne repond pas exactement a la question, mais tu peux utiliser memcpy pour ce genre de chose, plutot que de le faire a la main. Quitte a mettre l'appel a memcpy dans une fonction wrapper pour preciser l'utilisation.
Il faut se rappeler que c'est un exercice. On devrait savoir comment recopier un tableau dans un autre.
Plus tard, l'utilisateur en aura marre d'écrire ce genre de fonctions et utilisera les fonctions de la bibliothèque de C.
Le Tout est souvent plus grand que la somme de ses parties.
Copie d'un tableau dans un autre
× 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.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.
Le Tout est souvent plus grand que la somme de ses parties.
Recueil de code C et C++ http://fvirtman.free.fr/recueil/index.html
Le Tout est souvent plus grand que la somme de ses parties.