.exe a cesse de fonctionner [Résolu]

goodby - 26 déc. 2017 à 16:35 - Dernière réponse : [Dal] 4478 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 19 janvier 2018 Dernière intervention
- 10 janv. 2018 à 13:59
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
Afficher la suite 

6 réponses

Répondre au sujet
0
Utile
1
Bonjour,

Pouvez-vous nous fournir le code source de votre programme ?

Cordialement,
TECHSYS
oui bien sur
#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;
Commenter la réponse de TECHSYS
[Dal] 4478 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 19 janvier 2018 Dernière intervention - 27 déc. 2017 à 12:47
0
Utile
3
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
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
[Dal] 4478 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 19 janvier 2018 Dernière intervention - 27 déc. 2017 à 12:55
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/
D'accord merci beaucoup pour ton aide mais je n'ai pas compris quand doit on mettre & et quand on ne doit pas le mettre un pointeur??
[Dal] 4478 Messages postés mercredi 15 septembre 2004Date d'inscriptionContributeurStatut 19 janvier 2018 Dernière intervention - 10 janv. 2018 à 13:59
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 :
  • 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
Commenter la réponse de [Dal]