Probleme de programmation en C

NoWiS -  
 Jolkdarr -
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 ;)
A voir également:

11 réponses

Jolkdarr
 
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   Statut Membre Dernière intervention  
 
ho la boullette....

Merci beaucoups pour la reponse.
0
Jolkarr
 
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
ines
 
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
simo
 
evidement,

il te faut & dans la prmière scanf
0
NoWiS Messages postés 16 Date d'inscription   Statut Membre Dernière intervention  
 
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
Jolkdarr
 
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   Statut Membre Dernière intervention  
 
Merci ;)

Par contre le programme rencontre toujours le meme probleme.
0
Jolkdarr
 
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   Statut Membre Dernière intervention  
 
Ok merci.

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

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

return count;
}
0