.exe a cesse de fonctionner
Résolu
goodby
-
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
[Dal] Messages postés 6205 Date d'inscription Statut Contributeur Dernière intervention -
J'ai écris un programme en langage c, après sa compilation il m'affiche le message .exe a cesse de fonctionner .
Je ne comprend pas pourquoi?? j utilise code blocks
Si quelqu’un pourrait me répondre merci d'avance
Je ne comprend pas pourquoi?? j utilise code blocks
Si quelqu’un pourrait me répondre merci d'avance
A voir également:
- Main a cessé de fonctionner autocom
- Autocom cdp+ usb driver - Forum Pilotes (drivers)
- Main.exe - Forum Linux / Unix
- La main de la titi popo ✓ - Forum Musique / Radio / Clip
- Paroles de chants - Forum Musique / Radio / Clip
- Autocom ne se lance pas - Forum Logiciels
2 réponses
Salut goodby,
le message indiquant que ton programme a cessé de fonctionner est dû au fait que tu écris dans une zone mémoire non allouée par ton programme
pour capturer un int, scanf a besoin d'un pointeur sur une variable de type int, tu dois donc passer
ton printf n'a pas la bonne syntaxe : tu dois mettre les variables entières correspondant à tes deux spécificateurs %d en dehors des guillemets, séparés par des virgules. Ici, printf attend pour un %d des données de type int, et non pas des pointeurs, donc les & sont inappropriés. Au final, tu devrais faire
il manque aussi une accolade fermante dans ce que tu as posté, à la fin de ton code, mais je suppose que c'est une erreur de copier-coller
Dal
le message indiquant que ton programme a cessé de fonctionner est dû au fait que tu écris dans une zone mémoire non allouée par ton programme
pour capturer un int, scanf a besoin d'un pointeur sur une variable de type int, tu dois donc passer
scanf("%d",&myInt1);, par exemple, pour le premier scanf (pareil pour le deuxième) - ces erreurs sont à l'origine du plantage
ton printf n'a pas la bonne syntaxe : tu dois mettre les variables entières correspondant à tes deux spécificateurs %d en dehors des guillemets, séparés par des virgules. Ici, printf attend pour un %d des données de type int, et non pas des pointeurs, donc les & sont inappropriés. Au final, tu devrais faire
printf("il y a %d s pour %d h\n", myInt2, myInt1);
il manque aussi une accolade fermante dans ce que tu as posté, à la fin de ton code, mais je suppose que c'est une erreur de copier-coller
Dal
Lorsque tu programmes en C, utilise toujours une documentation de référence pour t'aider.
http://www.cplusplus.com/reference/cstdio/scanf/
http://www.cplusplus.com/reference/cstdio/printf/
http://www.cplusplus.com/reference/cstdio/scanf/
http://www.cplusplus.com/reference/cstdio/printf/
tu devrais revoir ton cours, ou un manuel de C
en gros :
tu ne mets pas & devant une variable, si ce que tu veux passer à la fonction est le contenu de la variable - dans ce cas la fonction travaille sur une copie de la valeur contenue en mémoire dans l'espace réservé à cette variable et cette copie se trouve sur une autre zone mémoire à laquelle la fonction a accès pendant le temps de son exécution
tu mets un & devant la variable, si ce que tu passes à la fonction c'est l'adresse mémoire où se trouve ce contenu - dans ce cas, la fonction obtient un pointeur sur cette adresse mémoire et s'en sert en déréférençant le pointeur passé pour accéder aux données, elle peut alors écrire et modifier le contenu pointé dont l'adresse lui a été passé
les chaînes, en C, sont particulières, car ce sont :
pour les chaînes, tu n'as pas besoin de les préfixer par & pour signifier que tu passes une adresse mémoire, car ce sont déjà des pointeurs ou elles sont comprises comme tels (si la chaîne est déclarée comme un tableau de chars, le passage du tableau sera compris comme le passage d'un pointeur sur l'adresse mémoire vers le premier élément du tableau)
enfin, lorsque tu fais usage des fonctions standard du C, tu ne choisis pas "au hasard" comment tu passes tes valeurs, tu dois le faire selon ce qui est attendu par le fonctionnement standard de cette fonction - et tu détermines cela simplement en regardant la documentation de la fonction, comme je te l'indiquais
en gros :
tu ne mets pas & devant une variable, si ce que tu veux passer à la fonction est le contenu de la variable - dans ce cas la fonction travaille sur une copie de la valeur contenue en mémoire dans l'espace réservé à cette variable et cette copie se trouve sur une autre zone mémoire à laquelle la fonction a accès pendant le temps de son exécution
tu mets un & devant la variable, si ce que tu passes à la fonction c'est l'adresse mémoire où se trouve ce contenu - dans ce cas, la fonction obtient un pointeur sur cette adresse mémoire et s'en sert en déréférençant le pointeur passé pour accéder aux données, elle peut alors écrire et modifier le contenu pointé dont l'adresse lui a été passé
les chaînes, en C, sont particulières, car ce sont :
- des pointeurs sur char (pointant vers une zone de mémoire allouée au programme où on peut stocker une succession de caractères terminés par le caractère null
'\0'
) - ou des tableaux de chars (stockant ce même type de données)
pour les chaînes, tu n'as pas besoin de les préfixer par & pour signifier que tu passes une adresse mémoire, car ce sont déjà des pointeurs ou elles sont comprises comme tels (si la chaîne est déclarée comme un tableau de chars, le passage du tableau sera compris comme le passage d'un pointeur sur l'adresse mémoire vers le premier élément du tableau)
enfin, lorsque tu fais usage des fonctions standard du C, tu ne choisis pas "au hasard" comment tu passes tes valeurs, tu dois le faire selon ce qui est attendu par le fonctionnement standard de cette fonction - et tu détermines cela simplement en regardant la documentation de la fonction, comme je te l'indiquais
#include<stdio.h>
int main()
{
char c;
int myInt1;
int myInt2;
printf("Entrez le nombre d'heure:");
scanf("%d",myInt1);
myInt2=myInt1*3600;
scanf("%d",myInt2);
printf("il y a %d s pour %d h &myInt2 &myInt1");
c=getchar();
putchar(c);
printf("il faut juste multiplier par 3600");
return 0;