erreur dans un programme simple (resolu)

erreur dans un programme simple (resolu) - C - Programmation

Marsh Posté le 09-08-2007 à 16:26:01    

Bonjour,
je voudrais que vous m'aidiez à trouvez l'erreur que devc++ me signal lors de la compilation. Le programme ne doit faire qu'une addition des chiffres du tableau.  

Citation :

#include <stdio.h>
#include <stdlib.h>
 
long sommeTableau(long tableau[], long tailleTableau);
 
 
int main(int argc, char *argv[])
{
    long tableau[4] = {10, 15, 3}, i = 0, somme;
    somme=sommeTableau(tableau[],4);
    printf("soit %ld",somme);
    return 0;
}
 
long sommeTableau(long tableau[], long tailleTableau)
{
    long i, somme;
    for (i = 0 ; i < tailleTableau ; i++)  
    {
    somme=somme+tableau[i];    
    }
    return somme;
     
}


Merci d'avance


Message édité par lamouche8 le 09-08-2007 à 16:48:15
Reply

Marsh Posté le 09-08-2007 à 16:26:01   

Reply

Marsh Posté le 09-08-2007 à 16:30:02    

Et quelle est cette  erreur?

 

Sinon, tu déclares un tableau de 4, mais tu ne mets que 3 valeurs, serait-ce cela?


Message édité par durkheim le 09-08-2007 à 16:31:28
Reply

Marsh Posté le 09-08-2007 à 16:31:27    

syntax error before  ']' token
il s'agit donc dans l'appel de la fonction je suppose


Message édité par lamouche8 le 09-08-2007 à 16:32:12
Reply

Marsh Posté le 09-08-2007 à 16:32:13    

Bah ouais, tu devrais pas faire ça plutot?
 
somme=sommeTableau(tableau,4);

Reply

Marsh Posté le 09-08-2007 à 16:34:17    

c'est déjà mieux puisque le programme s'execute et se compile mais l'addition du tableau n'est pas correct.

Reply

Marsh Posté le 09-08-2007 à 16:35:42    

Sinon, tu déclares un tableau de 4, mais tu ne mets que 3 valeurs, serait-ce cela?

 

Valeurs additionnées:

 

tableau[0]->10;
tableau[1]->15;
tableau[2]->3
tableau[3]->?????


Message édité par durkheim le 09-08-2007 à 16:36:39
Reply

Marsh Posté le 09-08-2007 à 16:36:24    

bah normalement non puisque il doit prendre la valeur par défaut, c'est à dire 0.

Reply

Marsh Posté le 09-08-2007 à 16:37:33    

Ah non, pas en C. Teste avec 3 comme longueur.

Reply

Marsh Posté le 09-08-2007 à 16:39:00    

Apparement le probleme ne vient pas de la non plus.

Reply

Marsh Posté le 09-08-2007 à 16:41:21    

tu ne vois rien d'autre?

Reply

Marsh Posté le 09-08-2007 à 16:41:21   

Reply

Marsh Posté le 09-08-2007 à 16:42:50    

Tu n'initialises pas ta variable somme dans sommeTableau. Essaie avec  
somme = 0;

Reply

Marsh Posté le 09-08-2007 à 16:45:15    

P...n, il faudrait que tu te sortes les doigts du luc de temps en temps aussi.
 
Parce là, c'est une erreur de pur débutant : variable non initialisée (j'ai dis variable, pas tableau).
 
Edit: arf, grilled.


Message édité par tpierron le 09-08-2007 à 16:47:04
Reply

Marsh Posté le 09-08-2007 à 16:45:21    

merci à toi durkheim ( par contre il prend bien la valeur par defaut 0 lorsque tu ne mets pas assez de valeurs)

Reply

Marsh Posté le 09-08-2007 à 16:49:01    

Ben ça ça dépend du compilateur. Là t'as un compilo C++ qui le fait, mais en théorie en C c'est pas censé arriver. Donc, tu dois y faire attention, car si tu compiles ça avec un compilo C uniquement, tu auras une belle erreur.

Reply

Marsh Posté le 09-08-2007 à 23:15:54    

durkheim a écrit :

Ben ça ça dépend du compilateur. Là t'as un compilo C++ qui le fait, mais en théorie en C c'est pas censé arriver. Donc, tu dois y faire attention, car si tu compiles ça avec un compilo C uniquement, tu auras une belle erreur.

Pas forcément, mais surement le jour où il présentera son prog à son prof.

Reply

Marsh Posté le 10-08-2007 à 08:13:59    

Hmm vous êtes sûrs que le standard ne dit pas que les slots non initialisés explicitement sont mis à 0 ? C'est comme ça si le tableau est global (ça c'est sûr à 100%), mais c'est vrai que j'ai un doute pour les tableaux locaux.

Reply

Marsh Posté le 10-08-2007 à 10:08:08    

J'en suis sûr absolument sûr. Pour le C non, pour le C++ oui.

Reply

Marsh Posté le 10-08-2007 à 10:34:20    

En C, il me semble que la norme dit que les variables globales sont initialisées à 0, pas les variables locales.
Maintenant, en Visual C par exemple, en mode debug les variables locales sont initalisées à 0 mais pas en mode Release, ce qui conduit parfois à des surprises ...

Reply

Marsh Posté le 10-08-2007 à 11:37:21    

utilise des size_t pour représenter les tailles de tableau. Et oui les indices pas initialisés sont mis à zéro.

Reply

Marsh Posté le 11-08-2007 à 15:58:20    

durkheim a écrit :

Ah non, pas en C. Teste avec 3 comme longueur.


La mouche a raison. L'initialisation se fait bien à 0 pour les éléments non définis d'une initialisation partielle. Le code est correct. L'erreur vient de ce que somme n'est pas initialisé comme indiqué par un compilateur bien réglé :

 

http://mapage.noos.fr/emdel/codage.htm#cfg_compilo

 
Citation :

n1124
6.7.8 Initialization
<...>
semantics
<...>
21 If there are fewer initializers in a brace-enclosed list than there are elements or members
of an aggregate, or fewer characters in a string literal used to initialize an array of known
size than there are elements in the array, the remainder of the aggregate shall be
initialized implicitly the same as objects that have static storage duration.


Message édité par Emmanuel Delahaye le 11-08-2007 à 16:13:10

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed