Probleme console (terminal) avec Dev-C++

Résolu/Fermé
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 - 26 sept. 2008 à 14:07
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 - 9 déc. 2014 à 15:43
Bonjour,

J'ai un programme qui fonctionne avec Dev-C++

Pour laisser l'ecran de la console, j'ai rajouté la fonction getchar();

Programme :

int main(void){
chargement des donnees a partir de fichiers de sauvegarde;
déroulement du programme;
...
getchar();
return 0;
}

Quand je lance le programme sans chargement de données, ça fonctionne correctement, mais dès que je rajoute le chargement au début du programme, c'est comme s'il ne tenait plus compte du getchar(), càd, la console s'affiche une fraction de seconde et se ferme.

Quelqu'un a une solution SVP?
A voir également:

13 réponses

Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
5 oct. 2008 à 18:34
ce n'es pas de la faute de DevCpp ni du compilateur !
C'est une erreur lors de l'exécution. Donc il faut reprocher quelque chose au code C (toi ou les lib standard) ou à l'OS.
Ce que tu dit, c'est comme reprocher à Renaud de pas t'avertir quand tu monte dans une voiture et que le conducteur est bourré.
4
Il faut qu'a la fin de ton programme tu rajoutes ceci : system("PAUSE");
et placé de telle sorte :

int main (void)
{
//Tes instructions , ton texte , tes saisies ect...
return 0
system("PAUSE");
}
1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
20 déc. 2011 à 11:29
Une commande après le return !
Bravo la connerie !
0
sans doute mais ça marche...
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
9 déc. 2014 à 15:43
normal, pas de ";" après le return. JE ne sais pas trop ce qu'il fait là.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 sept. 2008 à 14:06
Comme tu sais utiliser le debug, fait une exécution pas à pas, histoire de voir où il sort sans prévenir.
Ton problème, tel que tu le décris, pourrai venir de l'ordinateur et non de ton programme. Je te conseillerai donc de l'utiliser sur un autre ordinateur voir si le problème persiste (exécution voire compilation).

Attention tout de même, le debuggueur a une manière d'agir parfois déroutante, l'allocation mémoire est différente, si tu veux tester réellement l'utilisation mémoire de ton programme, utilises VALGRIND.
0
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
29 sept. 2008 à 15:26
j'ai vérifié pas à pas pour savoir où est-ce que le programme sort :

voici mon algo simplifié :

/*une fonction de chargement de données à partir d'un fichier de sauvegarde*/
/*si l'ouverture , le chargement et la fermeture du fichier se déroule bien, retourne 1, s'il y a eu un problème, retourne 0*/
int FonctionChargementDonnees(char * nom_fichier, typedéfini * ma_liste){
...
...
}



/*voici la fonction principale*/
int main(void){

déclarations des variables;

if(FonctionChargementDonnees(char * nom_fichier, typedéfini * ma_liste) == 0){
printf("\nIl y a eu un problème lors du chargement de données\n");
}

else{
printf("\nPas de problème rencontré lors du chargement\n");
}

getchar();
return 0;
}


C'est vrai que ma focntion FonctionChargementDonnées(...) retourne 1 ou 0 mais dans la fonction principale elle est bien dans mon premier if. Ça veut dire qu'il doit m'afficher l'un des messages dans printf dans tous les cas car il y a getchar() avant return 0.

A remarquer que la fonction "FonctionChargementDonnees(char * nom_fichier, typedéfini * ma_liste)" a été bien testée et pas de bug.

Sur linux il n'y a absolument pas de problème, mais sur Dev-C++ ça marche pas.
-1
salut tout le monde,
je suis étudiant et j'essaye d'apprendre un peu avec dev c++ et quand je lance mon programme, le terminal disparait super vite, et si je met system("pause") comme dit au dessus, lors de la compilation il met variable non identifiée ou ne peut etre utilisee comme fonction
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
26 sept. 2008 à 14:32
ton programme ne bifurque pas à un moment avec un return 0, ou un exit ?
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
26 sept. 2008 à 17:39
j'ai une fonction int Chargement_Des_Donnes(char * nom_fichier);
/*Cette fonction retourne 0 s'il y a un problème lors du chargement, sinon retourne 1 si tout va bien */

int main(void)
{
déclarations des variables;

if( Chargement_Des_Donnees == 0 )
{
printf(" Chargement échoué, ou fichier vide ");
}

else
{
printf(" Chargement réussi ");
}

getchar();

return;

}



Dès le commencement, je fais un test sur la fonction de chargement. Cette fonction retourne soit 0, soit 1. Mais dans l'un ou l'autre, je lui demande d'afficher si le chargement a réussi ou non. Est-ce que ça pourraît venir de là ?
-1
nEm3sis Messages postés 710 Date d'inscription lundi 20 août 2007 Statut Membre Dernière intervention 9 avril 2012 113
26 sept. 2008 à 15:28
il faudrait que tu montre le code parce que la on peut rien dire...
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
26 sept. 2008 à 17:28
Le programme est très long car je n'ai pas encore eu le temps de repartir en plusieurs fonctions donc je si je mets les centaines de lignes ici, ça risque d'être illisible.

En gros voici la fonction principale :

int main(void){

-déclaration des variables qui sont des listes chainees;

-j'ouvre plusieurs fichiers en mode "r" (pour read);

-je récupère les données de ces fichiers et je les affecte dans les champs de chaque liste chainée correspondants;

-je ferme tous les fichiers;

-Ici c'est le traitement du programme (insertion, modification, suppression .. etc ...);

-j'ouvre les fichiers en mode "w" (pour write);

-je sauvegarde les nouvelles données des listes chainées dans chaque fichiers correspondants;

-je ferme les fichiers;

-ici je mets getchar();

return 0;
}

Je me demande si Dev-C++ supporte la manipulation des fichiers textes ? Parce que dès que je supprime la partie chargement et sauvegarde, le programme fonctionne sans problème.

Pour vérifier, j'ai fais un code simple, juste un fscanf( ... ); quand j'execute le programme, ça me fait la même chose, càd qu'il n'arrive pas considérer le getchar() avant return 0.
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 sept. 2008 à 16:50
Il sort où alors ton programme ?
utilise la console cmd pour lancer ton programme, comme ça, si il sort quelque chose à l'écran tu le saura et pourra mieux déterminer où ça plante.
de plus, DevC++ n'est qu'un IDE, le compilateur est GCC.
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
29 sept. 2008 à 16:56
oui mais comment faire pour lancer une console cmd ? Quand je suis sur la machine de mon pote (windows XP), je suis directement dans la partie bureau. Faut-il aller chercher dans Démarrer-> ... ? pour lancer une console cmd ?
-1
tu peut aussi aller dans le bloc note et tu enregistre sous .bat sa t'ouvre ta consol
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 sept. 2008 à 17:02
demarrer executer, cmd
ou trouve "invite de commande" ensuite tu te met dans le bon répertoire avec "cd" et tu lance le programme.
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
29 sept. 2008 à 21:28
si je comprend bien, cette console est pareil que sur linux ?

supposons que le répertoire se trouve dans \Poste de travail\Devcpp, donc je tapes cd \Poste de travail\Devcpp.

maintenant supposons que je suis dans le repertoire, je fais comme sur linux en tapant ./mon_executable pour lancer mon executable?
-1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
30 sept. 2008 à 09:29
presque.
sur XP, il y a une notion de lecteur (c: d:) , comme si il y avait plusieurs racines sous Linux.
Ensuite, sur win, le répertoire courant est dans le PATH (normalement), donc pas besoin de préciser "./".
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
30 sept. 2008 à 19:46
salut, j'ai testé une fonction pour voir si Dev-cpp supporte les fichiers.

pour ecrire les données dans des fichiers il n'y a pas de problème mais pour faire l'inverse ça ne marche pas.

voici ma fonction principale que j'ai enregistrée sous le nom de fonction_principale.c:

int main(void){

FILE * fic;

fic = fopen("mon_fichier_bidule", "r");

if(fic == NULL) printf("\nErreur lors de l'ouverture du fichier mon_fichier_bidule\n");

else printf("\nOuverture du fichier sans problème\n");

close(fic);

getchar();

return 0;

}

voici le message d'erreur lors de l'execution : "fonction_principale.exe" a rencontré un problème et doit fermer. Nous vous prions de nous excuser pour les désagréments encourus"

Apparemment je pense que c'est un problème de chemin pour ouvrir le fichier. En effet, mon_fichier_bidule se trouve dans c:\Dev-cpp\mon_projet\ mais comment indiquer dans la ligne de fopen(...), le chemin exact ? Sachant que sur linux on utilise "/" et non pas "\" donc je ne sais pas quoi faire avec Dev-C++

Quand je fais fic = fopen("c:\Dev-cpp\mon_projet\mon_fichier_bidule", "r"); ça ne passe pas
-1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 oct. 2008 à 08:36
Comme tu dois le savoir, "\" est un caractère d'échappement dans une string, donc "c:\D" est interprété comme une chaine de 3 caractères 'c', ':' et '\D'. Pour donner un chemin entier, il faut écrire "c:\\Devcpp\\monprojet".
l'erreur doit être lors du close(), car fermer un fichier non ouvert, il n'aime pas.
Sinon, il n'y a aucune raison de remettre les capacités de DevCpp en cause, des milliers de personnes l'utilise sans problème et ça reviens à mettre en cause le compilateur gcc utiliser sans problème par des millions de personnes.
Bref, toute erreur viens de toi et non du logiciel, surtout sur des problèmes si simples.
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
1 oct. 2008 à 15:36
merci, je vais essayer ce que tu as donné.

Ce qui m'a dérouté c'était le fait que si j'utilise fopen("mon_fichier_exemple", "a"); si le fichier existe déjà, il écrit directement à partir de la fin du fichier. Par contre s'il n'existe pas, il créé le fichier et écrit en ajout dessus. Ceci étant, le fichier créé se range par défaut dans c:\Dev-cpp
sans que je ne précise c:\Dev-cpp\mon_fichier_exemple

Par la même logique, je me disais que si un fichier existe déjà dans c:\Dev-cpp , je pensais qu'il suffisait de préciser le nom du fichier sans préciser le chemin, d'où mon instruction fopen("mon_fichier_exemple", "r");
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
1 oct. 2008 à 15:41
je dirai comme toi.
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
2 oct. 2008 à 00:13
salut, j'ai un petit soucis :

ma fonction de chargement est la suivante : int Chargement(Liste * L, char * nom_du_fichier);
codée comme suit :

int Chargement(Liste * L, char * nom_du_fichier){

FILE * fic;

fic = fopen(nom_du_fichier, "r");

if(fic == NULL) return 1; /*si le fichier ne peut etre ouvert, je retourne 1*/

else{
je fais le traitement de transfert dans la liste L prise en premier parametre;
fclose(fic);
return 0;/*tout s'est bien passé donc je retourne 0;*/
}

}

Ma question est la suivante : étant donnée que ma focntion prend en 2ème paramètre un pointeur sur le nom du fichier, comment pourrais-je faire appel à ce nom en indiquant le chemin ?

moi je ferai :

int main(void){
Liste * L = NULL;
Chargement(L, "nom_de_mon_fichier");/*on suppose qu'on ne vérifie pas s'il retourne 0 ou 1*/
getchar();
return 0;
}


est-ce que je peux mettre ceci à la place d ce que j'ai mis en gras ?

Chargement(L, "c:\\Dev-cpp\\mon_projet\\nom_de_mon_fichier");
0
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
2 oct. 2008 à 08:40
oui, bien sur.
-1
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
4 oct. 2008 à 23:07
Salut, le problème ne vient pas du chemin ni de mes fonctions de chargement, c'est le nom du fichier existant qui est erroné.

Mais ce que je reproche sur Dev-C++ c'est qu'au lieu d'afficher un message d'erreur pour indiquer que le fichier en question ne peut pas être ouvert, il ferme directement la console.

En tout cas merci pour toutes les réponses, ouf.
-1
Char Snipeur Messages postés 9696 Date d'inscription vendredi 23 avril 2004 Statut Contributeur Dernière intervention 3 octobre 2023 1 297
29 sept. 2008 à 08:34
tu peux essayer de lancer le programme avec le debuggeur de DevCpp.
Sinon, il est possible qu'un fichier soit mal ouvert.
Je suppose que tu les ouvre avec la fonction fopen(). Si c'est le cas vérifie à chaque fois que la fonction n'a pas retourné 0.
Un programme qui se termine sans rien dire, c'est 9 fois sur 10 un problème de pointeur mal initialisé.
-2
oupsman Messages postés 316 Date d'inscription mercredi 26 décembre 2007 Statut Membre Dernière intervention 22 octobre 2008 10
29 sept. 2008 à 12:39
salut sniper,

Effectivement j'ai déjà varifié avec le débugueur, pas de problème, le programme est sain.

Mais lorsque je l'execute, la console se ferme directe alors qu'avant return 0 à la fin de mon main, il y a bien getchar();

Ce que j'ai remarqué : les fichiers que j'essai d'ouvrir ne peuvent pas être copier/coller dans le repertoire de Dev-C++. Pourtant quand j'essai de refaire un copie/coller une nouvelle fois des mêmes fichiers, il m'indique que les fichiers y sont déjà dedans alors que je ne les vois pas ....
0