probleme de boucle

probleme de boucle - C - Programmation

Marsh Posté le 24-05-2006 à 14:30:41    

Code :
  1. #include <stdio.h>
  2. int r=0;
  3. void menu() {
  4.     clrscr();
  5.     printf("\n\n\ " );
  6.     printf("\t [1]  aaa \t  [2]  bbb \t [3]  ccc" );
  7.     printf("\n\n\ " );
  8.     printf("\n\n\ " );
  9.     printf("\t [4]  ddd \t  [5]  eee \t [6]  QUITTER" );
  10.     printf("\n\n\n\ " );
  11. printf("ENTREZ VOTRE CHOIX :  " );
  12. scanf("%d",&r);


Code :
  1. char repin[3];
  2. int a;
  3. do
  4. {
  5.     if ( r == 1 )
  6.             {
  7.                 printf("\n\n\t" );
  8.                 printf("Gpresult ;;;; Are You Sure ( [y]/[n] ) : " );
  9.                 fgets(repin, sizeof repin, stdin);
  10.                 a = *repin;
  11.                     if (a=='y')
  12.                     {
  13.                         printf("in repin" );
  14.                         printf("on continue" );
  15.                         getch();
  16.                         a='n';
  17.                     }
  18.                     else
  19.                     {
  20.                     printf("sortie" );
  21.                     getch();
  22.                     }
  23.             }


Code :
  1. if ( r == 2 )
  2.             {
  3.                 printf("\n\n\t" );
  4.                 printf("bbb" );
  5.                 printf("\n\n\n\ " );
  6.                 getch();
  7.             }
  8.     if ( r == 3 )
  9.             {
  10.                 printf("\n\n\t" );
  11.                 printf("ccc" );
  12.                 printf("\n\n\n\ " );
  13.                 getch();
  14.             }
  15.     if ( r == 4 )
  16.             {
  17.                 printf("\n\n\t" );
  18.                 printf("ddd" );
  19.                 printf("\n\n\n\ " );
  20.                 getch();
  21.             }
  22.     if ( r == 5 )
  23.             {
  24.                 printf("\n\n\t" );
  25.                 printf("eee" );
  26.                 printf("\n\n\n\ " );
  27.                 getch();
  28.             }
  29. }while (a!='n');
  30. }


 
Le problème vient du passage du milieu : il s'execute dabord un fois comme si il avait la valeur de a et apres un getch(); me demande la valeur de a ...
j'éspere avoir été clair  
 
 
merci d'avance !!


Message édité par magiclazy le 24-05-2006 à 14:32:13
Reply

Marsh Posté le 24-05-2006 à 14:30:41   

Reply

Marsh Posté le 24-05-2006 à 14:35:01    

en rajoutant

Code :
  1. printf("%d",a);

au dessus de  

Code :
  1. if (a=='y')


 
j'ai l'impression qu'il prend la valeur de r comme reponse .....


Message édité par magiclazy le 24-05-2006 à 14:35:27
Reply

Marsh Posté le 24-05-2006 à 15:08:50    

Code :
  1. #include <stdio.h>
  2. int r=0;
  3. void menu() {
  4.     clrscr();
  5.     printf("\n\n\ " );
  6.     printf("\t [1]  aaa \t  [2]  bbb \t [3]  ccc" );
  7.     printf("\n\n\ " );
  8.     printf("\n\n\ " );
  9.     printf("\t [4]  ddd \t  [5]  eee \t [6]  QUITTER" );
  10.     printf("\n\n\n\ " );
  11. printf("ENTREZ VOTRE CHOIX :  " );
  12. scanf("%d",&r);
  13. char repin[3];
  14. int a;
  15. do
  16. {
  17.     if ( r == 1 )
  18.             {
  19.                 fflush(stdin);
  20.                 printf("\n\n\t" );
  21.                 printf("Gpresult ;;;; Are You Sure ( [y]/[n] ) : " );
  22.                 fgets(repin, sizeof repin, stdin);
  23.                 a = *repin;
  24.                     if (a=='y')
  25.                     {
  26.                         printf("in repin" );
  27.                         printf("on continue" );
  28.                         getch();
  29.                         a='n';
  30.                     }
  31.             }
  32.     if ( r == 2 )
  33.             {
  34.                 printf("\n\n\t" );
  35.                 printf("bbb" );
  36.                 printf("\n\n\n\ " );
  37.                 getch();
  38.             }
  39.     if ( r == 3 )
  40.             {
  41.                 printf("\n\n\t" );
  42.                 printf("ccc" );
  43.                 printf("\n\n\n\ " );
  44.                 getch();
  45.             }
  46.     if ( r == 4 )
  47.             {
  48.                 printf("\n\n\t" );
  49.                 printf("ddd" );
  50.                 printf("\n\n\n\ " );
  51.                 getch();
  52.             }
  53.     if ( r == 5 )
  54.             {
  55.                 printf("\n\n\t" );
  56.                 printf("eee" );
  57.                 printf("\n\n\n\ " );
  58.                 getch();
  59.             }
  60. fflush(stdin);
  61. }while (a!='n');
  62. }


 
une ptite question comment faire pour que si la reponse n'est ni 1,2,3,4,5,6 il me redemande ?? merci d'avance !!!!!!!!

Reply

Marsh Posté le 24-05-2006 à 15:09:52    

merci pour fflush(); !!

Reply

Marsh Posté le 24-05-2006 à 15:12:40    

fflush(stdin) [:fou]

Reply

Marsh Posté le 24-05-2006 à 15:14:26    

c'est bizzare le massage du gars c'est effacé il m'a dit d'essayer avec  
 
 
fflush(stdin)
 
et sa marche car sinon il garde l'entrée precedente en mémoire (enfin c'est ce que j'en dedduis ..." )

Reply

Marsh Posté le 24-05-2006 à 15:15:25    

Tu m'étonnes qu'il ait effacé son message, le monsieur. [:moule_bite]  
(comportement non défini par la norme => ne pas utiliser car possibilité de résultats "étranges" )

Reply

Marsh Posté le 24-05-2006 à 15:16:17    

HA ......
ok mais comment faire alors ???

Reply

Marsh Posté le 24-05-2006 à 15:30:06    

magiclazy a écrit :

HA ......
ok mais comment faire alors ???


Problème récurrent.

  • ne pas mélanger les entrées directes (getch()) et par stdin. (scanf().
  • si tu choisis les entrées par stdin (standard), n'utilise scanf() que si tu le maitrises (ce n'est pas le cas ici...). Sinon, utilise exclusivement fgets() comme ceci :  
Code :
  1. char line[TAILLEKIVABIEN];
  2.    fgets(line, sizeof line, stdin);
  3.    clean(line, stdin);


clean() est définie comme ceci :  

Code :
  1. static void purge(FILE *fp)
  2. {
  3.    int c;
  4.    while ((c = fgetc(fp)) != '\n' && c != EOF)
  5.    {
  6.    }
  7. }
  8. static void clean (char *s, FILE *fp)
  9. {
  10.    /* search ... */
  11.    char *p = strchr (s, '\n'); /* <string.h> */
  12.    if (p != NULL)
  13.    {
  14.       /* ... and kill */
  15.       *p = 0;
  16.    }
  17.    else
  18.    {
  19.       purge (fp);
  20.    }
  21. }


avec ça, tes problèmes de saisies sont définitivement résolus (fonctions 'libres' à mettre en bibliothèque).
 
Avant de poser 3000 questions, un peu de lecture pour comprendre le pourquoi du comment :  
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers
 
Maintenant, tu peux poser des questions précises si tu ne comprends pas ma réponse ou les articles.


Message édité par Emmanuel Delahaye le 24-05-2006 à 15:31:38

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 17:53:17    

J'AI TOUT COMPRIS !!
 
;) :):):)
 
merci à toi je repost mon code un peu plus tard
 
encore merci

Reply

Marsh Posté le 24-05-2006 à 17:53:17   

Reply

Marsh Posté le 24-05-2006 à 17:59:17    

une (seule) question quel bibliotheque pour clean();
 
google ma trahis smirff

Reply

Marsh Posté le 24-05-2006 à 18:37:23    

magiclazy a écrit :

une (seule) question quel bibliotheque pour clean();


C'est mon code :  
 
http://forum.hardware.fr/hardwaref [...] m#t1374279
 


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 18:41:50    

jsuis une quiche au niveau des def et include alors sa je le met comment ?

Reply

Marsh Posté le 24-05-2006 à 19:00:16    

magiclazy a écrit :

jsuis une quiche au niveau des def et include alors sa je le met comment ?


Si tu veux faire des développepents sérieux, c'est un point à améliorer rapidement.
 
http://mapage.noos.fr/emdel/codage [...] ser_source
http://mapage.noos.fr/emdel/codage.htm#organiser
 
Soit tu as un petit projet (main.c) et tu fais un copié/collé dans le main.c
Soit tu veux réutiliser clean() indépendemment et tu créés 2 fichiers :  
 

  • L'interface (.h)
Code :
  1. /* clean.h */
  2. #ifndef H_CLEAN
  3. #define H_CLEAN
  4. #include <stdio.h>
  5. void clean (char *s, FILE *fp);
  6. #endif


  • L'implémentation (.c)
Code :
  1. #include "clean.h"
  2. #include <string.h>
  3. static void purge(FILE *fp)
  4. {
  5.    int c;
  6.    while ((c = fgetc(fp)) != '\n' && c != EOF)
  7.    {
  8.    }
  9. }
  10. void clean (char *s, FILE *fp)
  11. {
  12.    /* search ... */
  13.    char *p = strchr (s, '\n'); /* <string.h> */
  14.    if (p != NULL)
  15.    {
  16.       /* ... and kill */
  17.       *p = 0;
  18.    }
  19.    else
  20.    {
  21.       purge (fp);
  22.    }
  23. }


et dans le tous les fichiers où tu utilises clean(), tu inclus "clean.h"
 
Ajoute clean.c au projet.


Message édité par Emmanuel Delahaye le 24-05-2006 à 19:01:40

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 19:01:58    

super ;) !!! merci bcp

Reply

Marsh Posté le 24-05-2006 à 19:11:08    

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <conio2.h>
  4. #include <string.h>
  5. void menu()
  6. {
  7. char r[2];
  8. char repif[2];
  9. char repdo[2];
  10.     clrscr();
  11.     printf("\n\n\ " );
  12.     printf("\t [1]  aaa \t  [2]  bbb \t [3]  ccc" );
  13.     printf("\n\n\ " );
  14.     printf("\n\n\ " );
  15.     printf("\t [4]  ddd \t  [5]  eee \t [6]  QUITTER" );
  16.     printf("\n\n\n\ " );
  17. printf("ENTREZ VOTRE CHOIX :  " );
  18. fgets(r,sizeof r, stdin);
  19. clean(r, stdin);
  20. do
  21. {
  22.     if ( *r == '1' )
  23.             {
  24.                 printf("\n\n\t" );
  25.                 printf("Gpresult ;;;; Are You Sure ( [y]/[n] ) : " );
  26.                 fgets(repif, sizeof repif, stdin);
  27.                     if (*repif=='y')
  28.                     {
  29.                         printf("\n\n ON LANCE un_commande ou sytem_info ...." );
  30.                         /*CHERCHER COMMENT FAIRE TOURNER UNE BARRE !!!*/
  31.                         getch();
  32.                         *repdo='n';
  33.                     }
  34.             }
  35.     if ( *r == '2' )
  36.             {
  37.                 printf("\n\n\t" );
  38.                 printf("bbb" );
  39.                 printf("\n\n\n\ " );
  40.                 getch();
  41.             }
  42.     if ( *r == '3' )
  43.             {
  44.                 printf("\n\n\t" );
  45.                 printf("ccc" );
  46.                 printf("\n\n\n\ " );
  47.                 getch();
  48.             }
  49.     if ( *r == '4' )
  50.             {
  51.                 printf("\n\n\t" );
  52.                 printf("ddd" );
  53.                 printf("\n\n\n\ " );
  54.                 getch();
  55.             }
  56.     if ( *r == '5' )
  57.             {
  58.                 printf("\n\n\t" );
  59.                 printf("eee" );
  60.                 printf("\n\n\n\ " );
  61.                 getch();
  62.             }
  63.     if ( *r == '6' )
  64.             {
  65.                 exit(0) ;
  66.             }
  67.     else
  68.             {
  69.                 printf("else" );
  70.                *repdo='n';
  71.             }
  72. }while (*repdo!='n');
  73. }


 
j'ai essayé de pas surcharger en clean(); et tout sa tourne nickel
 
merci bcp
 
ps:toutes remarques (jsuis tres debutant ..) sont les bienvenues ...
 
merci bcp

Reply

Marsh Posté le 24-05-2006 à 19:42:29    

une ptite question comment affecter le resulat d'un ctime au nom d'un FILE
 
en gros je génere ma date et je voudrais que mon fichier ai cette date
j'ai essayé en passant par un char mais sa merdouille
 
...
 
merki encore d'avance
 
ps:c'est possible de créer un dossier ?

Reply

Marsh Posté le 24-05-2006 à 21:22:19    

c'est pas clair ou j'ai mal formulé ?
voulez des informations supplementaires ??

Reply

Marsh Posté le 24-05-2006 à 21:25:08    

magiclazy a écrit :

une ptite question comment affecter le resulat d'un ctime au nom d'un FILE


C'est pas clair. Ti veux concaténer une date et un nom de fichier ? Il faut savoir que  

  • la chaine dont l'adresse er retournée par ctime() est interne, donc unique. Pour la récupérer, il faut la copier. strftime() permet d'éviter ça.
  • elle est terminée par un '\n'.
Citation :


en gros je génere ma date et je voudrais que mon fichier ai cette date
j'ai essayé en passant par un char mais sa merdouille


"sa merdouille" (sic!) c'est censé être une explication de ton problème ? Et on censé répondre comment à ça ? Il faut se mettre à notre place 2 minutes. On ne peut pas deviner les problèmes si il ne sont pas expliqués...
 
Tu veux changer la date du fichier ou l'intégrer à son nom ?
 

Citation :

ps:c'est possible de créer un dossier ?


Pas en C standard, mais mkdir() est POSIX.1, donc très portable...


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 21:26:05    

magiclazy a écrit :

c'est pas clair ou j'ai mal formulé ?
voulez des informations supplementaires ??


Cool, je peux aller démouler un cake tranquillement ?
 
T'as le feu au cul ou quoi ?


---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 21:29:10    

dsl jcrois que j'ai été grillé j'avais pas rafraichi ma page dsl !!
 
ps: il est bon ??     ( le cake ? )
 
 
revenons au chmilblick
 
enfaite je veux recupérer la date et créer une fichier qui aura pour nom cette date
 
et quand je dis sa merdouille (shame on me) jsuis pas honnete je veux dire ji arrive pô ... smirff
 
merci de ta patiente
;)

Message cité 1 fois
Message édité par magiclazy le 24-05-2006 à 21:29:24
Reply

Marsh Posté le 24-05-2006 à 21:30:00    

magiclazy a écrit :

ps:toutes remarques (jsuis tres debutant ..) sont les bienvenues ...


 
switch...case  

Reply

Marsh Posté le 24-05-2006 à 21:33:03    

magiclazy a écrit :

une ptite question comment affecter le resulat d'un ctime au nom d'un FILE
 
en gros je génere ma date et je voudrais que mon fichier ai cette date
j'ai essayé en passant par un char mais sa merdouille
 
...
 
merki encore d'avance
 
ps:c'est possible de créer un dossier ?


 
ctime() + sprintf() pour concocter son nom de fichier aux petits oignons + fopen() qui va bien.

Reply

Marsh Posté le 24-05-2006 à 21:35:27    

ctime() ou strftime()  ?
 
merrki de vs occupé de moi :):)

Reply

Marsh Posté le 24-05-2006 à 21:37:30    

magiclazy a écrit :

enfaite je veux recupérer la date et créer une fichier qui aura pour nom cette date
 
et quand je dis sa merdouille (shame on me) jsuis pas honnete je veux dire ji arrive pô ... smirff


Suites aux explications que je t'ai données, ça ne fonctionne toujours pas ?  
 
"ji arrive pô" c'est censé me renseigner sur la nature de tes problèmes ? Tu lis mes posts ou quoi ? je parle aux murs ?
 
Alors dernier avertissement.
 

  • Soit tu formules des questions précises, tu fournis le code qui ne fonctionne pas, bref, tu montres que tu as envie qu'on te répondre
  • Soit tu te débrouilles sans moi.


Pas que ça à faire...


Message édité par Emmanuel Delahaye le 24-05-2006 à 21:39:39

---------------
Des infos sur la programmation et le langage C: http://www.bien-programmer.fr Pas de Wi-Fi à la maison : http://www.cpl-france.org/
Reply

Marsh Posté le 24-05-2006 à 21:39:49    

désolé .... je cherche un peu par moi même avec les infos précedentes
et dès que j'ai besoin je post le code et tout merci bcp !!
 
à dans pas longtemps je pense :):);) !!

Reply

Marsh Posté le 24-05-2006 à 21:40:05    

magiclazy a écrit :

ctime() ou strftime()  ?
 
merrki de vs occupé de moi :):)


 
strftime() :

size_t strftime(char * restrict buf, size_t maxsize,  const char * restrict format, const struct tm * restrict timeptr);


=> "retourne" la date au format que tu veux, à partir d'un struct tm*
 
ctime() :

char * ctime(const time_t *clock);


=> retourne la date au format "Thu Nov 24 18:22:48 1986\n\0", à partir d'un time_t *. Pas top pour un nom de fichier.
 
La fonction strftime() est donc plus adaptée.  
Autre solution : convertir la date en un struct tm*, et utiliser les données de la structure directement, à sa convenance (ce qui permet d'étendre les possibilités par rapport à strftime() ).


Message édité par Elmoricq le 24-05-2006 à 21:40:54
Reply

Marsh Posté le 24-05-2006 à 21:51:14    

j'auais besoin d'un petit renseignement quand on ecrit :
 
FILE *x;
 
comment peut on fair pour que (par exemple) x soit une un char ?

Reply

Marsh Posté le 24-05-2006 à 21:56:44    

magiclazy a écrit :

j'auais besoin d'un petit renseignement quand on ecrit :
 
FILE *x;
 
comment peut on fair pour que (par exemple) x soit une un char ?


 
En utilisant ceci :
http://pix.nofrag.com/f7/8e/b4f72abacac39d172ca155117b22.jpg
 
[:el g]


Message édité par Elmoricq le 24-05-2006 à 21:57:35
Reply

Marsh Posté le 24-05-2006 à 21:57:45    

haa ok c''est bien ce que je me disais !!!
 
et sinon ?

Reply

Marsh Posté le 24-05-2006 à 21:58:45    

magiclazy a écrit :

haa ok c''est bien ce que je me disais !!!
 
et sinon ?


 
Ben sinon, ça marche pas ! [:dawa]

Reply

Marsh Posté le 24-05-2006 à 22:01:24    

Elmoricq a écrit :

Ben sinon, ça marche pas ! [:dawa]


 
 :sweat:  :sweat:  :sweat:  :sweat:  j'ai dis un truc si stupide ? coment faire sinon je suis bien obligé d'utiliser FILE* non ?  :sweat:  :sweat:  :??:  :??:  

Reply

Marsh Posté le 24-05-2006 à 22:03:07    

magiclazy a écrit :

:sweat:  :sweat:  :sweat:  :sweat:  j'ai dis un truc si stupide ? coment faire sinon je suis bien obligé d'utiliser FILE* non ?  :sweat:  :sweat:  :??:  :??:


 
mais ca veut rien dire ce que tu demandes ! soit plus precis sinon on te repondra des conneries faute de mieux

Reply

Marsh Posté le 24-05-2006 à 22:05:47    

ben comment faire pour que le pointeur vers FILE soit une variable ? ou autre chose que je puis définir ? pour par exemple que le nom du fichier sois la date du jour car je comprends comment recupere la date et ouvrir un fichier mais pas comment définir le pointeur

Reply

Marsh Posté le 24-05-2006 à 22:07:18    

Et avec quelle fonction ouvres-tu un fichier ?
 
 
Indice : la réponse est dans ce topic [:moule_bite]


Message édité par Elmoricq le 24-05-2006 à 22:07:44
Reply

Marsh Posté le 24-05-2006 à 22:08:17    

fopen(); ....
 
mais FILE * doit etre pointé avant non ?

Reply

Marsh Posté le 24-05-2006 à 22:12:36    

magiclazy a écrit :

fopen(); ....
 
mais FILE * doit etre pointé avant non ?


 
J'vois pas comment :

FILE *fopen (const char *path, const char *mode);


 

Citation :

The fopen() function opens the file whose name is the string pointed to
by path and associates a stream with it.



Message édité par Elmoricq le 24-05-2006 à 22:14:22
Reply

Marsh Posté le 24-05-2006 à 22:22:34    

magiclazy a écrit :

fopen(); ....
 
mais FILE * doit etre pointé avant non ?


 
un objet de type 'FILE *' doit etre initialise avec fopen

Reply

Marsh Posté le 24-05-2006 à 22:25:15    

Code :
  1. #include <stdio.h>
  2. void un_commande()
  3. {
  4. char t[100];
  5. time(&t);
  6. printf("\n\n\t%s",ctime(&t));
  7. getch();
  8. FILE *fopen (*t,"a" );
  9.     /*system("Gpresult >fic.txt" );*/
  10. }


 
sa doit etre le fatigue ou autre chose  :o  :cry:  :whistle:  mais sa ne marche pas en faisant la maniere que je connais j'y arrive mais pas là ..
 
 

Code :
  1. #include <stdio.h>
  2. void un_commande()
  3. {
  4. char t[100];
  5. time(&t);
  6. printf("\n\n\t%s",ctime(&t));
  7. getch();
  8. FILE *file;
  9. fopen ("nom_1.txt","a" );
  10.     /*system("Gpresult >fic.txt" );*/
  11. }

Reply

Marsh Posté le 24-05-2006 à 22:36:50    

magiclazy a écrit :

Code :
  1. #include <stdio.h>
  2. void un_commande()
  3. {
  4. char t[100];
  5. time(&t);
  6. printf("\n\n\t%s",ctime(&t));
  7. getch();
  8. char ch[80+1], fmt[80+1], * pcloc;
  9. struct tm * pdh; time_t intps; int nbc;
  10. intps=time(NULL); pdh = localtime(&intps);
  11. nbc = strftime( ch, 81, "date : %A %d %B %Y", pdh);
  12. printf("(nbc:%d) %s\n", nbc, ch);
  13. getch();
  14. FILE *file;
  15. fopen (ch,"a" );
  16.     /*system("Gpresult >fic.txt" );*/
  17. }


 
je crois que je me raproche !!  :na:


 
http://pix.nofrag.com/aa/01/b783eaa2d549d3b425edfccc8b0c.gif
 
Sérieusement, tu ne veux pas ouvrir un livre de C, faire quelques recherches sur Google, ou réfléchir, consulter un marabout, n'importe quoi je sais pas... bref n'importe quoi plutôt que de coder au hasard ?

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed