Erreur d'exécution
Fermé
Sigmastorm
-
19 avril 2013 à 13:40
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 27 avril 2013 à 16:10
mamiemando Messages postés 33446 Date d'inscription jeudi 12 mai 2005 Statut Modérateur Dernière intervention 20 décembre 2024 - 27 avril 2013 à 16:10
A voir également:
- Erreur d'exécution
- Erreur 0x80070643 - Accueil - Windows
- Erreur 0x80070643 Windows 10 : comment résoudre le problème de la mise à jour KB5001716 - Accueil - Windows
- Erreur 1001 outlook - Accueil - Bureautique
- Erreur 3005 france tv - Forum TV & Vidéo
- Erreur de lecture reconnecté en 3s - Forum TV & Vidéo
1 réponse
mamiemando
Messages postés
33446
Date d'inscription
jeudi 12 mai 2005
Statut
Modérateur
Dernière intervention
20 décembre 2024
7 812
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