Probleme de programmation en C
NoWiS
-
Jolkdarr -
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".
Merci de bien vouloir m'ader ;)
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:
- Probleme de programmation en C
- Application de programmation - Guide
- Mettre en veille un programme - Guide
- Fermer un programme de force - Guide
- Télécharger le programme de pmu - Télécharger - Médias et Actualité
- Programmation carte à puce vierge ✓ - Forum Matériel & Système
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 !
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 !
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 !
À 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 !
je n'ai pas compris l'utilisation de double pointeurs
exp: deftype struct { int elem ;
char nom; }ab;
(...)
ab **A;
aidez moi
merci
exp: deftype struct { int elem ;
char nom; }ab;
(...)
ab **A;
aidez moi
merci
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
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.
Merci de votre aide ;)
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 ;)
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 !
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 !
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 !
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 !