Erreur d'exécution
Fermé
Sigmastorm
-
19 avril 2013 à 13:40
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 27 avril 2013 à 16:10
mamiemando Messages postés 33088 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 30 avril 2024 - 27 avril 2013 à 16:10
A voir également:
- Erreur d'exécution
- Erreur 0x80070643 - Guide
- Erreur d'execution 1004 - Forum Programmation
- Erreur d'exécution 1004 ✓ - Forum Excel
- Iptv erreur de lecture - Forum TV & Vidéo
- Erreur d'execution 13 ✓ - Forum Programmation
1 réponse
mamiemando
Messages postés
33088
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
30 avril 2024
7 751
Modifié par mamiemando le 27/04/2013 à 16:10
Modifié par mamiemando le 27/04/2013 à 16:10
Il y a plusieurs choses qui ne vont pas.
1) Pour commencer aucune raison d'inclure conio.h qui dans ce programme ne sert à rien et n'est pas un header standard.
2) Ensuite en C++ moderne, il faut inclure <iostream> et non <iostream.h>. On peut au besoin dans un fichier ".cpp" ajouter l'instruction "using namespace std;" pour taper "cout" ou "endl" au lieu de "std::cout" ou "std::endl".
3) En C++ on n'inclue pas <stdio.h> qui est un header C, mais <cstdio> qui est le header C++ correspondant.
4) Ta fonction main est sensée avoir l'un des prototypes suivant
... et elle est sensée retourner 0 si tout s'est bien passé (une valeur non nulle sinon, appelée code d'exécution).
5) Pour être dans l'esprit C++, normalement tu n'as pas vraiment de raison d'utiliser de FILE * (plutôt des std::ofstream ou std::ifstream), ni les fonctions associées (fopen, close) qui serait plus la manière de faire en C. De plus tu es sensé vérifier que fopen n'échoue pas (il retourne dans ce cas un pointeur non NULL), car le fichier peut ne pas exister ou tu peux ne pas avoir les droits nécessaire pour l'ouvrir. Ainsi pour ouvrir et fermer proprement un fichier on écrirait :
En C :
En C++ :
6) De la même façon, pour lire des valeurs saisies au clavier, je te conseille d'utiliser std::cin et l'opérateur >> car il y a beaucoup de pièges avec scanf.
7) Aucune raison de déclarer un char[50] ici, un const char * est bien plus indiqué :
8) Pour écrire dans un fichier, encore une fois il ne faut pas hésiter à utiliser std::ofstream et l'opérateur <<, qui s'utilise de la même manière que pour std::cout et std::cerr.
Bonne chance
1) Pour commencer aucune raison d'inclure conio.h qui dans ce programme ne sert à rien et n'est pas un header standard.
2) Ensuite en C++ moderne, il faut inclure <iostream> et non <iostream.h>. On peut au besoin dans un fichier ".cpp" ajouter l'instruction "using namespace std;" pour taper "cout" ou "endl" au lieu de "std::cout" ou "std::endl".
3) En C++ on n'inclue pas <stdio.h> qui est un header C, mais <cstdio> qui est le header C++ correspondant.
4) Ta fonction main est sensée avoir l'un des prototypes suivant
int main() int main(int argc, char **argv)
... et elle est sensée retourner 0 si tout s'est bien passé (une valeur non nulle sinon, appelée code d'exécution).
5) Pour être dans l'esprit C++, normalement tu n'as pas vraiment de raison d'utiliser de FILE * (plutôt des std::ofstream ou std::ifstream), ni les fonctions associées (fopen, close) qui serait plus la manière de faire en C. De plus tu es sensé vérifier que fopen n'échoue pas (il retourne dans ce cas un pointeur non NULL), car le fichier peut ne pas exister ou tu peux ne pas avoir les droits nécessaire pour l'ouvrir. Ainsi pour ouvrir et fermer proprement un fichier on écrirait :
En C :
#include <stdio.h> int manipuler_fichier(const char * filename) { FILE * fp; if (!(fp = fopen(filename, "r")) { fprintf(stderr, "Can't read %s\n", filename); return -1; } //... lire le fichier ... fclose(fp); return 0; }
En C++ :
#include <iostream> #include <fstream> bool manipuler_fichier(const char * filename) { std::ifstream ifs(filename); if (!ifs) { std::cerr << "Can't read " << filename << std::endl; return -1; } //... lire le fichier ... ifs.close(); return 0; }
6) De la même façon, pour lire des valeurs saisies au clavier, je te conseille d'utiliser std::cin et l'opérateur >> car il y a beaucoup de pièges avec scanf.
int x, y; std::cout << "x ?" << std::endl; std::cin >> x; std::cout << "y ?" << std::endl; std::cin >> y;
7) Aucune raison de déclarer un char[50] ici, un const char * est bien plus indiqué :
const char * mon_fichier = "c:\\users\\sony\\documents\\tp8\\saad.txt";
8) Pour écrire dans un fichier, encore une fois il ne faut pas hésiter à utiliser std::ofstream et l'opérateur <<, qui s'utilise de la même manière que pour std::cout et std::cerr.
bool ecrire_fichier(const char * filename) { std::ofstream ofs(filename); if (!ofs) { std::cerr << "Can't write " << filename << std::endl; return -1; } ofs << "Coucou" << std::endl; ofs.close(); return 0; }
Bonne chance