Aller au contenu
  • Pas encore inscrit ?

    Pourquoi ne pas vous inscrire ? C'est simple, rapide et gratuit.
    Pour en savoir plus, lisez Les avantages de l'inscription... et la Charte de Zébulon.
    De plus, les messages que vous postez en tant qu'invité restent invisibles tant qu'un modérateur ne les a pas validés. Inscrivez-vous, ce sera un gain de temps pour tout le monde, vous, les helpeurs et les modérateurs ! :wink:

Programmation en C


LooKFoR

Messages recommandés

Bonjour tout le monde, j'ai ecrit un petit programme tres simple mais malgrès cela j'ai quand meme une erreur a la fin de son execution ! C'est peut-etre un truc tout bete... je ne sais pas ! En tout cas je vous met le code et si vous pourriez voir vite fait le probleme sa serait cool =)

 

#include <stdio.h>
#include <stdlib.h>

int main(void) {
FILE* fich;
char* fichier;
int ouvert=0, cpt=1;
printf("Nom du fichier : ");
scanf("%s", fichier);
while ((ouvert==0) && (cpt<=5000000)) {
	fich=fopen(fichier,"r");
	if ((ouvert==0) && (fich!=NULL)) {
		system(fichier);
		ouvert=1;
	}
	if ((cpt==5000000) && (ouvert==0)) {
		printf("Fichier introuvable !");
	}	
	cpt++;
}
fclose(fich);
system("PAUSE");
}

 

L'erreur c'est : "prog.exe a rencontré un probleme et doit fermé. Nous vous prions de nous ......." , alors que le programme est executé entierement, c'est vraiment a la fin qu'il me met ca !

 

PS : desole si le code est peu cochon ... je ne suis pas un pro en c lol et j'avais pas besoin de le pofiner c'est juste pour une utilisation unique ^^,

 

PS 2 : Si tout de meme vous avez des amelioration a apportées je suis prenant ! =)

 

Merci et bonne journée a tous !

Modifié par LooKFoR
Lien vers le commentaire
Partager sur d’autres sites

scanf("%s", fichier);

 

pour récupérer une chaine de caractères, il faut indiquer l'adresse du pointeur

scanf("%s", &fichier);

 

qu'est ce qu'est censé faire ta commande

system(fichier);

:P

tu veux faire répéter 5000000 de fois cette instruction?

 

Pour débugger, tu peux toujours rajouter des printf(...) au cours de ton code pour situer l'erreur (vérification de la cohérence des variables, etc etc...)

Lien vers le commentaire
Partager sur d’autres sites

Ouai c'est ce que j'ai fait, j'ai mis des printf pour regler mes problemes mais la je vois pas d'ou ca peut venir... en faite le programme est executer entierement ( jusqu'au system("pause") ) et ensuite l'erreur s'affiche ...

 

Oui pour le scanf() faut mettre le "&" c'est vrai j'avai oublié ! merci !

 

En faite, mon programme demande le nom d'un fichier, puis il le cherche ( avec le while ) dans le repertoire courrant, quand il le trouve il l'ouvre et quitte le programme, seulement pour ne pas faire une boucle infinie je voudrais que le programme cherche le fichier 2/3min puis si il l'a pas trouvé dans ce temps la il quitte en affichant "fichier introuvable", mais je sais pas comment le faire chercher 2/3min donc je lui est mis de faire 5 000 000 de boucles.... c'est nul je sais mais je ne sais pas comment faire autrement :/

Modifié par LooKFoR
Lien vers le commentaire
Partager sur d’autres sites

la valeur maximale d'un unsigned short int est 65535, dont cpt ne peut aller jusqu'à 5000000

 

d'ailleurs, pour tester si l'ouverture du fichier a réussi (et par conséquent que le fichier existe bien), il suffit de faire un test sur le pointeur

 

if (if (fich != NULL) )
{
...
}
else
{
printf("Impossible d'ouvrir le fichier %s", fichier);}

Lien vers le commentaire
Partager sur d’autres sites

Merci Greywofl ! Pour le test du fichier j'en est pas besoin vu que je veux qu'il essaye de l'ouvrir jusqu'a ce qu'il le trouve ^^ , s'il le trouve pas je veux pas qu'il m'affiche 5 000 000 de fois "impossible d'ouvrir le fichier !" ^^,

 

Sinon je met quoi pour mon compteur "cpt" pour qu'il aille jusqu'a 5 000 000 ?

Modifié par LooKFoR
Lien vers le commentaire
Partager sur d’autres sites

vu que je veux qu'il essaye de l'ouvrir jusqu'a ce qu'il le trouve

 

je comprends pas vraiment le but de l'opération... mais bon c'est ta cuisine :P

Lien vers le commentaire
Partager sur d’autres sites

lol ouai je sais ^^,

Bon je n'irai pas dans les details mais je veux pouvoir ouvrir le plus rapidement possible une page internet que je vien d'enregistrer, car dessus il y a des chrono et quand j'enregistre la page sur mon DD le chrono s'arrete tant que ce n'est pas ouvert alors que celui de la page internet continu... ( normal lol ! ), je veux donc l'ouvrir rapidement grace a ce programme pour que le chronometre de la page que j'ai enregistrée soit au plus pres exact avec celui de la page internet ! Ca peut paraitre un peu idiot mais j'en est besoin mdr x)

Lien vers le commentaire
Partager sur d’autres sites

t'as essayé une boucle while ?

 

while (fich == NULL)

{

fich=fopen(fichier,"r");

}

puis tu enchaines sur ta commande, une fois le fichier ouvert

Lien vers le commentaire
Partager sur d’autres sites

Tu crois que sa marcherais ? car a l'initialisation fich n'est pas forcement null... il peut s'y trouver n'importe qu'elle valeure non ? ^^,

 

EDIT : je pourrais initilaiser fich avec une valeure faire mon while en consequence mais on m'a dit que c'etait un peu coder a l'arrache de faire ca lol ! ( c'est mon prof qui a dit... ! )

Modifié par LooKFoR
Lien vers le commentaire
Partager sur d’autres sites

a l'initialisation fich n'est pas forcement null
Tu sais que c'est mauvais de déclarer des variables sans les initialiser ?

 

... et ...

Il me semble que "PAUSE" est une commande intégrée au shell et pas un exécutable que tu peux appeler depuis ton programme... mais bon, je dis ça... le C sous Windows je n'en ai pas fait des masses...

Tu souhaites juste attendre que quelqu'un appuie sur une touche à la fin de ton programme ?

Lien vers le commentaire
Partager sur d’autres sites

Rejoindre la conversation

Vous pouvez publier maintenant et vous inscrire plus tard. Si vous avez un compte, connectez-vous maintenant pour publier avec votre compte.
Remarque : votre message nécessitera l’approbation d’un modérateur avant de pouvoir être visible.

Invité
Répondre à ce sujet…

×   Collé en tant que texte enrichi.   Coller en tant que texte brut à la place

  Seulement 75 émoticônes maximum sont autorisées.

×   Votre lien a été automatiquement intégré.   Afficher plutôt comme un lien

×   Votre contenu précédent a été rétabli.   Vider l’éditeur

×   Vous ne pouvez pas directement coller des images. Envoyez-les depuis votre ordinateur ou insérez-les depuis une URL.

  • En ligne récemment   0 membre est en ligne

    • Aucun utilisateur enregistré regarde cette page.
×
×
  • Créer...