Erreur

cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 - 28 août 2003 à 17:02
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 29 août 2003 à 11:24
Salut a tous,
voila je voudrait faire un truc, mais je n'y arrive pas. Alors plutot que de vous expliquez ce que c'est, je vous montre le code.

#include <stdio.h>

main()
{
int a = 5;

int code[a];
for (int b 0; b 4; b++)
code[b] = b;
}


Voila aider moi, svp...

18 réponses

HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
28 août 2003 à 17:12
#include <stdio.h>

main()
{
int a = 5;

int code[a];

for (int b = 0; b <= 4; b++) //= est une affectation
code[b] = b;
}

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 août 2003 à 17:14
Salut,
J'imagine que tu veux remplir ton tableau d'int code avec les valeur 0, 1, 2, 3 et 4.
L'erreur est au niveau de la condition dans la boucle for.
Faudrais plutot mettre:
for (int b = 0; b <= 4; b++)
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 17:24
ok merci, mais quand je compile le code avec VC++ 6.0, il me marque toujours des erreurs (3):

"expected constant expression"
"cannot allocate an array of constant size 0"
"code' : unknown size"

pourriez-vous m'aider svp
0
HCJarod Messages postés 221 Date d'inscription mardi 12 août 2003 Statut Membre Dernière intervention 11 décembre 2008 1
28 août 2003 à 17:28
Normal, tu ne peut pas faire
int a=5;
int code[a];
fait plutot

#define a 5
...
int code[a];

Chaque problème a sa solution. S'il n'y a pas de solution c'est qu'il n'y a pas de problème.
a+
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 17:57
oui mais a ce moment le code ne repond plus mon attente, car normalement la variable 'a' est une variable de type 'int' dont la valeur est définie par l'utilisateur de mon programme...
0
cs_aardman Messages postés 1905 Date d'inscription mercredi 22 janvier 2003 Statut Membre Dernière intervention 17 septembre 2012 3
28 août 2003 à 18:02
Salut,
Quand tu declare un tableau comme ca, la taille de ton tableau doit etre une constante, impossible a faire avec une variable.
Si tu veux faire un tableau de taille variable, il faut allouer de la mémoire dynamiquement (avec malloc(...) par exemple).
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 18:06
mais y aurrait pas un moyen de faire autrement car la variable 'a' une fois définie, ne change pas tout au long du programme... sa valeur est définie en debut de programme et ne change pas tout le de l'execution... ny aurrait il pas un moyen de faire autrement?
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2003 à 18:22
int *tab = malloc(a * sizeof(int));
BruNews, ciao...
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 18:26
oula oula oula, explik un peu stp car la g un peu de mal a comprendre...
0
BruNews Messages postés 21040 Date d'inscription jeudi 23 janvier 2003 Statut Modérateur Dernière intervention 21 août 2019
28 août 2003 à 18:34
int *tab = (int) malloc(a * sizeof(int));

c'est bien un tableau int de a elements que tu veux, et bien tu l'as.
Manipule tab comme si etait declare:
int tab[a]; c'est idem
quand ne te sert plus:
free(tab); // desallouer la memoire.
BruNews, ciao...
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
28 août 2003 à 18:46
Petit oubli:

int *tab = (int*) malloc(a * sizeof(int));


Kaid - kaid.fr.st
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 18:59
excuser moi mais je suis pas sur d'avoir tout compris pourriez vous ecrire un tit exemple de code, un peu comme j'ai fait dans mon premier message...
merci beaucoup...
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
28 août 2003 à 19:21

#include <stdio.h>

int main(int, char**)
{

// Dans ton cas saisie par l'utilisateur
int a = 5;

// Allocation dynamique
int* code=(int*)malloc(a * sizeof(int));

for (int b = 0; b < a; b++)
code[b] = b;

// Utilisation de ton tableau
// ...

// Libération mémoire
free(code);

return 1;
}
 



Kaid - kaid.fr.st
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 19:30
ok merci, maintenant j'ai deux question sur ton code... la premiere pourquoi mettre avec 'main':

(int, char**)


et ensuite pourquoi mettre a la fin:

return 1;


je sais que c'est lié à ma premiere question, mais pour quoi ne pas mettre 'return 0'?

sinon merci bcp pour ton aide...
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 19:36
et comment je fé pour afficher la valeur b[0] et b[4] par exemple dans ton programme?
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
28 août 2003 à 20:06
Pour le main(), différents prototypes existent. Dans mon exemple, ma fonction main() retourne un entier et reçoit comme paramètre un entier et un tableau de chaines de caractères. Il s'agit respectivement du nombre d'arguments passés au programme (via la ligne de commande) et de la liste de ses arguments. Dans ton exemple, tu n'avais pas spécifié ni 'int' ni 'void' devait ton prototype, le type de retour de la fonction devient implicitement 'int'. Il te manquait donc le 'return X' à la fin du programme. Dev-C++ ne signale pas d'erreur mais Visual C++ si.

La valeur de retour c'est assez arbitraire, c'est l'héritage du DOS et des codes d'erreurs (ERRORLEVEL si ca te dis quelque chose) qui permettent de savoir si l'exécution d'un programme c'est bien passé.
Par exemple:

0 -> Erreur
1 -> Ok
2 -> Mauvais arguments sur la ligne de commande
3 -> Plus de mémoire
...

Kaid - kaid.fr.st
0
cs_LordBob Messages postés 2865 Date d'inscription samedi 2 novembre 2002 Statut Membre Dernière intervention 11 mai 2009 9
28 août 2003 à 20:17
voila j'ai encore un probleme, je n'arrive pas a afficher les valeur contenue dans 'code'... comment dois-je faire? sinon une autre question totalement hors-sujet, tu fait quoi comme boulot, tu travaille dans l'informatique?
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
29 août 2003 à 11:24
Pour l'affichage:
<code>

int a=5, b;
char strTmp[128];

int* code=....;

for(b=0;bkaid.fr.st
0
Rejoignez-nous