Probleme de programmation en C

Fermé
NoWiS - 27 août 2004 à 22:19
 Jolkdarr - 30 août 2004 à 19:54
Bonjours je debute en programmation C.
J'ai pondu ce code pour m'entrainé, je compile, j'exécute mais le programme ferme brusquement lors de la fin de la premiere boucle "for".

// commandes preprocesseurs

#include <stdio.h>
#include <stdlib.h>

#define MAX 10


// init. des fonctions, tableaux, variables

int somtabs(int tab1[], int tab2[]);

int tab1[MAX], tab2[MAX];
int count, total;


//fonction principale

int main()
{
      for(count=0; count < MAX; count++)
      {
          tab1[count]=rand();
          printf("\nEntrer le nombre numero %d\n", count+1);
          scanf("%d",tab2[count]);
      }
      total=somtabs(tab1, tab2);
      printf("Le total est égal a : %d", total);
      system("PAUSE");
      return 0;
}


//fonction(s) secondaire(s)

int somtabs(int tab_1[], int tab_2[])
{
      for(count=0; count < MAX; count++)
          total=tab1[count]+tab2[count]+total;
      return total;
}


Merci de bien vouloir m'ader ;)

11 réponses

Hello !

La fonction scanf nécessite une référence de la variable à modifier.
Il faut donc écrire :

scanf("%d", &tab2[count]);

ou, de manière équivalente :

scanf("%d", tab2+count);

Take care !
0
NoWiS Messages postés 16 Date d'inscription vendredi 27 août 2004 Statut Membre Dernière intervention 15 octobre 2004
27 août 2004 à 23:36
ho la boullette....

Merci beaucoups pour la reponse.
0
You're welcome ! (De rien !)

À noter qu'un compilateur C++ aurait généré une erreur à la compilation. Le type fourni à scanf (int) n'étant pas compatible avec le type attendu (void*). Même si tu ne connais pas le langage C++ (il est bon d'apprendre le C au préalable), tu peux quand même essayer de le compiler en C++ pour voir si tu obtiens une compilation sans erreur ni avertissement, surtout en cas de plantage sévère à l'exécution comme dans ton cas.

Take care !
0
je n'ai pas compris l'utilisation de double pointeurs
exp: deftype struct { int elem ;
char nom; }ab;
(...)
ab **A;
aidez moi
merci
0

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

Posez votre question
evidement,

il te faut & dans la prmière scanf
0
NoWiS Messages postés 16 Date d'inscription vendredi 27 août 2004 Statut Membre Dernière intervention 15 octobre 2004
29 août 2004 à 23:23
j'ai un nouveau probleme.
Ce programme doit servir a compter le nombre de caractere que l'utilisateur entre dans les chaines de caractere.
Le probleme se situe au niveau de la premiere utilisation de la fonction compte().
cette ligne pour etre plus précis :
-----taille1=compte(*chaine1, MAX);

Le programme me compile, mais ca bug.


#include <stdio.h>
#include <stdlib.h>

#define MAX 20

char *chaine1, *chaine2;
int taille1, taille2, count, total;

int compte(char *x1, int taille);

int main()
{
      if( ((chaine1=(char *) malloc(MAX))==NULL) || ((chaine2=(char *) malloc(MAX))==NULL) )
      {
           puts("Probleme d'allocation de mémoire");
           exit(1);
      }
      puts("Entrer votre nom");
      gets(chaine1);
      taille1=compte(*chaine1, MAX);
      puts("Entrer votre prénom");
      gets(chaine2);
      taille2=compte(*chaine2, MAX);
      printf("\nVotre nom possede %d caracteres et votre prenom en possede %d.\n Donc un total de %d caractere\n\n", taille1, taille2, taille1+taille2);
      system("PAUSE");
      return 0;
}

int compte(char *x1, int taille)
{
      total=0;
      for(count=0; count<taille; count++)
      {
           if( *(x1+count) != NULL )
                total++;
      }
      return total;
}



Merci de votre aide ;)
0
Hello !

Conseil :
Ne jamais faire d'allocation mémoire dans une expression conditionnelle.
Dans ton code, l'allocation mémoire de chaine2 ne se fait que si chaine1 == NULL . Donc, si l'allocation mémoire de chaine1 réussit, chaine2 ne possède pas de mémoire allouée. La suite tu la devines...

Essaie le code suivant :

#include <stdio.h>
#include <stdlib.h>

#define MAX 20

int taille1, taille2, count, total;

int compte(char *x1, int taille);

int main()
{
char* chaine1 = (char*) malloc(MAX);
char* chaine2 = (char*) malloc(MAX);

if (chaine1 == NULL || chaine2 == NULL)
{
puts("Probleme d'allocation de mémoire");
exit(1);
}

/* le reste ne change pas */


Remarques :
1) Pour compter la longueur d'une chaîne de caractères, tu peux utiliser la fonction strlen.
2) Déclare Total dans la fonction compte, c'est mieux.

Take care !
0
NoWiS Messages postés 16 Date d'inscription vendredi 27 août 2004 Statut Membre Dernière intervention 15 octobre 2004
30 août 2004 à 10:20
Merci ;)

Par contre le programme rencontre toujours le meme probleme.
0
Hello !

Effectivement, il y a un autre problème tout aussi grave.
L'utilisation de la fonction compte est incorrecte. Il te faut passer un pointeur et non un char. Ecrire :

taille1=compte(chaine1, MAX);
...
taille2=compte(chaine2, MAX);

Je suis étonné que ton compilateur ne râle pas. Il est temps de penser à le remplacer.

Take care !
0
NoWiS Messages postés 16 Date d'inscription vendredi 27 août 2004 Statut Membre Dernière intervention 15 octobre 2004
30 août 2004 à 19:44
Ok merci.

Pour info, mon compilateur est DEV-C++.
0
Je te conseille de reécrire ta fonction compte :

int compte(char *x1)
{
int count = 0;
for (; x1[count]; )
count++;

return count;
}
0