Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
662 connectés 

  FORUM HardWare.fr
  Programmation
  C

  [C} DO...While + un condition

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[C} DO...While + un condition

n°1266812
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 21:54:05  profilanswer
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {
  6.     int essai = 0;
  7.     int rep;
  8.         srand ((unsigned) time (NULL));
  9.         rand();/* ignorer le premier tirage */
  10. /*1*/
  11.             do
  12.             {
  13.                 int nb1 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  14.                 int nb2 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  15.                 int nb3 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  16.                 int nb4 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  17.                 int nb5 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  18.                 printf ("\n%d %d %d %d %d ", nb1, nb2, nb3, nb4, nb5);
  19.                 if (((nb1)==(nb2))&&((nb2)==(nb3))&&((nb3)==(nb4))&&((nb4)==(nb5)))
  20.                 {
  21.                 printf("\nYAmmm !!\n\n" );
  22.                 essai=(essai+1);
  23.                 getch();
  24.                 }
  25.                 else
  26.                 {
  27.                 printf("\nreesaye.\n\n" );
  28.                 essai=(essai+1);
  29.                 getch();
  30.                 }
  31. /*2*/
  32.                 printf("voulez vous recommencer (1=yes)(0=non) ?" );
  33.                 scanf("%d",&rep);
  34.             }while ((rep!=0));
  35.     return 0;
  36. }


 
 
 
je voudrais savoir comment on peut faire pour que de 1 à 2 cela s'exectue plusieur fois avant de me demander si je veux continuer ...
 
j'ai pensé a sa mais sa ne marche pas .. (la premiere fois si parfaitement mais la snd ne sarrete plus c'est a dire qu'il me demande un fois si je ve continuer puis il ne me le demande plus ..)
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {
  6.     int essai = 0;
  7.     int rep;
  8.         srand ((unsigned) time (NULL));
  9.         rand();/* ignorer le premier tirage */
  10.             do
  11.             {
  12.                 int nb1 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  13.                 int nb2 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  14.                 int nb3 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  15.                 int nb4 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  16.                 int nb5 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  17.                 printf ("\n%d %d %d %d %d ", nb1, nb2, nb3, nb4, nb5);
  18.                 if (((nb1)==(nb2))&&((nb2)==(nb3))&&((nb3)==(nb4))&&((nb4)==(nb5)))
  19.                 {
  20.                 printf("\nYAmmm !!\n\n" );
  21.                 essai=(essai+1);
  22.                 getch();
  23.                 }
  24.                 else
  25.                 {
  26.                 printf("\nreesaye.\n\n" );
  27.                 essai=(essai+1);
  28.                 getch();
  29.                 }
  30.                 printf("voulez vous recommencer (1=yes)(0=non) ?" );
  31.                 scanf("%d",&rep);
  32.             }while ((rep!=0));
  33.     return 0;
  34. }


---------------
signature du message
mood
Publicité
Posté le 14-12-2005 à 21:54:05  profilanswer
 

n°1266815
magiclazy
citation personnelle associé
Posté le 14-12-2005 à 21:56:16  profilanswer
 

peut etre avec switch ??
 
la nuit porte conseil (il parait ..) je verrais demain en tout cas si vous
avez pas besoin de dormir pour voir une solution merci d'avance ..


---------------
signature du message
n°1266864
Emmanuel D​elahaye
C is a sharp tool
Posté le 14-12-2005 à 23:05:56  profilanswer
 


Bouh que c'est pas beau... C'est quoi ce délire avec les () ?


#include <stdio.h>
#include <stdlib.h>
#include <time.h>
 
int main (void)
{
   int essai = 0;
   int rep;
 
   srand ((unsigned) time (NULL));
   rand(); /* ignorer le premier tirage */
 
   do
   {
      int nb[5];
      size_t i;
 
      for (i = 0; i < sizeof nb / sizeof *nb; i++)
      {
         nb[i] = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
      }
 
      for (i = 0; i < sizeof nb / sizeof *nb; i++)
      {
         printf ("%3d", nb[i]);
      }
      printf ("\n" );
 
      {
         int eq = 1;
 
         for (i = 1; eq && i < sizeof nb / sizeof *nb; i++)
         {
            eq = nb[0] == nb[i];
         }
 
         if (eq)
         {
            printf("\nYAmmm !!\n\n" );
         }
         else
         {
            printf("\nTry again ...\n\n" );
            essai++;
         }
      }
 
      printf("Play again [y/n] ?" );
 
      {
         char s[3];
         fgets(s, sizeof s, stdin);
         rep = *s;
      }
 
   }
   while (rep != 'n');
 
   return 0;
}


Pose des questions si tu ne comprends pas...

Citation :

je voudrais savoir comment on peut faire pour que de 1 à 2 cela s'exectue plusieur fois avant de me demander si je veux continuer ...


Une boucle...

Citation :

j'ai pensé a sa mais sa ne marche pas .. (la premiere fois si parfaitement mais la snd ne sarrete plus c'est a dire qu'il me demande un fois si je ve continuer puis il ne me le demande plus ..)


Un problème probablement dû au mauvais choix de la fonction de saisie. Corrigé ci-dessus. Détails ici :  
 
http://mapage.noos.fr/emdel/notes.htm#saisie
http://mapage.noos.fr/emdel/notes.htm#fichiers

Message cité 1 fois
Message édité par Emmanuel Delahaye le 14-12-2005 à 23:07:09

---------------
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/
n°1266982
Sve@r
Posté le 15-12-2005 à 09:49:52  profilanswer
 

Hum... moi j'ai juste une question sur la ligne

        nb[i] = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);


 
Tous ces cast sont-ils vraiment nécessaires ? Dans une opération mathématique, l'ensemble des opérandes est converti dans la valeur de l'opérande le plus fort. Alors je pense qu'elle peut être avantageusement remplacée par la ligne suivante:

        nb[i] = (int) (rand() / (RAND_MAX + 1.0) * 10);


 
Non ???

n°1267109
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 12:12:55  profilanswer
 

salut je pouvais pas me connecter alors j'ai plancher la dessus et j'ai trouver exactement ce que je cherchais
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {   
  6. int rep;
  7.     do
  8.     {
  9.         int essai = 0;
  10.         srand ((unsigned) time (NULL));
  11.         rand();       
  12.             do
  13.             {
  14.                 int nb1 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  15.                 int nb2 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  16.                 int nb3 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  17.                 int nb4 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  18.                 int nb5 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  19.                 printf ("\n%d %d %d %d %d ", nb1, nb2, nb3, nb4, nb5);
  20.                 if (((nb1)==(nb2))&&((nb2)==(nb3))&&((nb3)==(nb4))&&((nb4)==(nb5)))
  21.                 {
  22.                 printf("              YAmmm !!\n\n" );
  23.                 essai=(essai+1);
  24.                 getch();
  25.                 }
  26.                 else
  27.                 {
  28.                 printf("              reesaye.\n\n" );
  29.                 essai=(essai+1);
  30.                 getch();
  31.                 }
  32.             }while ((essai!=5));
  33. printf("voulez vous recommencer (1=yes)(0=non) ?" );
  34. scanf("%d",&rep);
  35.     }while (rep != 0);
  36.    
  37.     return 0;
  38. }


 
enfaite ton code fais la meme chose que si je suppprime le premier do...while et que j'insere la question dans le 2eme.. seulement je n'ai qu'un essaie (ou 2 de ta facon ..)


Message édité par magiclazy le 15-12-2005 à 12:14:16

---------------
signature du message
n°1267112
Elmoricq
Modérateur
Posté le 15-12-2005 à 12:14:19  profilanswer
 

Dans ce cas-là tu ferais mieux d'utiliser une boucle for(;;)


Message édité par Elmoricq le 15-12-2005 à 12:14:34
n°1267121
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 12:21:35  profilanswer
 

est ce que tu peux detailler pour quoi il faudrait mieux ?
 
ps: apres avoir lu ton code j'ai améliorer le mien
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {
  6. int rep;
  7. char s[3];
  8.     do
  9.     {
  10.         int essai = 0;
  11.         srand ((unsigned) time (NULL));
  12.         rand();
  13.             do
  14.             {
  15.                 int nb1 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  16.                 int nb2 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  17.                 int nb3 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  18.                 int nb4 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  19.                 int nb5 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  20.                 printf ("\n%d %d %d %d %d ", nb1, nb2, nb3, nb4, nb5);
  21.                 if (((nb1)==(nb2))&&((nb2)==(nb3))&&((nb3)==(nb4))&&((nb4)==(nb5)))
  22.                 {
  23.                 printf("              YAmmm !!\n\n" );
  24.                 essai=(essai+1);
  25.                 getch();
  26.                 }
  27.                 else
  28.                 {
  29.                 printf("              reesaye.\n\n" );
  30.                 essai=(essai+1);
  31.                 getch();
  32.                 }
  33.             }while ((essai!=5));
  34. printf("voulez vous recommencer (y=yes)(n=non) ?" );
  35. fgets(s, sizeof s, stdin);
  36. rep = *s;
  37.     }while (rep != 'n');
  38.     return 0;
  39. }


---------------
signature du message
n°1267153
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 12:42:31  profilanswer
 

comme sa tu veux dire avec for(;;)
 

Code :
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <time.h>
  4. int main (void)
  5. {
  6. int rep;
  7. char s[3];
  8.     do
  9.     {
  10.         int essai = 0;
  11.         srand ((unsigned) time (NULL));
  12.         rand();
  13.             for (essai=0;essai!=5;essai+1)
  14.             {
  15.                 int nb1 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  16.                 int nb2 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  17.                 int nb3 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  18.                 int nb4 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  19.                 int nb5 = (int) ((double)rand() / ((double)RAND_MAX + 1) * 10);
  20.                 printf ("\n%d %d %d %d %d ", nb1, nb2, nb3, nb4, nb5);
  21.                 if (((nb1)==(nb2))&&((nb2)==(nb3))&&((nb3)==(nb4))&&((nb4)==(nb5)))
  22.                 {
  23.                 printf("              YAmmm !!\n\n" );
  24.                 essai=(essai+1);
  25.                 getch();
  26.                 }
  27.                 else
  28.                 {
  29.                 printf("              reesaye.\n\n" );
  30.                 essai=(essai+1);
  31.                 getch();
  32.                 }
  33.             }
  34. printf("voulez vous recommencer (y=yes)(n=non) ?" );
  35. fgets(s, sizeof s, stdin);
  36. rep = *s;
  37.     }while (rep != 'n');
  38.     return 0;
  39. }


---------------
signature du message
n°1267164
Elmoricq
Modérateur
Posté le 15-12-2005 à 12:48:44  profilanswer
 

magiclazy a écrit :

est ce que tu peux detailler pour quoi il faudrait mieux ?


Tu as écris ceci :

int essai = 0;
do
{
   ...
   if ( ...)
   {
      essai = (essai + 1);
   }
   else
   {
      essai = (essai + 1);
   }
} while ((essai != 5));


 
Je te propose de l'écrire comme ceci :

int essai;
for( essai = 0; essai < 5; essai++ )
{
   ...
   if ( ... )
   {
      ...
   }
   else
   {
      ...
   }
}


 
(ceci hors considérations de simple logique, parce qu'avec ce que tu as écris, on est bon pour 5 essais, même si on gagne)
 

magiclazy a écrit :

ps: apres avoir lu ton code j'ai améliorer le mien


 
1. c'était celui d'Emmanuel, pas le mien
2. ça m'étonnerait que tu l'aies lu. Exemple : c'est quoi ton délire avec les parenthèses ? :??:
 
Pourquoi tu écris des trucs aussi laids que : essai = (essai + 1) ?!
"essai = essai + 1" ne te convient pas ? (sans compter les syntaxes facilitantes, comme "essai += 1" ou encore "essai++" )
 
De même, pourquoi répéter les mêmes instructions dans la partie "else" d'un if au final ? Autant n'écrire ces instructions qu'une seule fois, en dehors du if. C'est de la simple logique.


Message édité par Elmoricq le 15-12-2005 à 12:51:35
n°1267167
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 12:52:54  profilanswer
 

ok merci


---------------
signature du message
mood
Publicité
Posté le 15-12-2005 à 12:52:54  profilanswer
 

n°1267168
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 12:53:40  profilanswer
 

ps: je cherche des tutos pour utiliser des commandes comme fopen ()parceque j'ai un peu du mal avec les man voila

Message cité 2 fois
Message édité par magiclazy le 15-12-2005 à 13:06:45

---------------
signature du message
n°1267172
Elmoricq
Modérateur
Posté le 15-12-2005 à 12:56:11  profilanswer
 

creat() étant une fonction POSIX (comprendre : unixoïdes), je te suggère d'utiliser fopen(), qui est standard.
 
creat() n'est utile que pour créer un fichier vide avec des droits Unix particuliers.

n°1267175
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 13:01:49  profilanswer
 

oki merci


---------------
signature du message
n°1267178
Sve@r
Posté le 15-12-2005 à 13:03:42  profilanswer
 

magiclazy a écrit :

ps: je cherche des tutos pour utiliser des commandes comme creat ()parceque j'ai un peu du mal avec les man voila


 
http://fr.lang.free.fr/cours/Fichiers_Csyst_v1.0.pdf

n°1267183
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 13:06:20  profilanswer
 

merci c'est exactement sa sauf que moi je suis sous win ..
 
[EDIT] donc c'est pas creat() mais fopen() par exemple ..

Message cité 1 fois
Message édité par magiclazy le 15-12-2005 à 13:07:16

---------------
signature du message
n°1267200
Sve@r
Posté le 15-12-2005 à 13:20:10  profilanswer
 

magiclazy a écrit :

merci c'est exactement sa sauf que moi je suis sous win ..


Ah ? Tu as parlé de "man" donc je t'ai cru sous Unixlike
 
http://fr.lang.free.fr/cours/Langa [...] e_v2.0.pdf => il y a un gros chapitre sur les fonctions de la bibliothèque standard et un sous-chapitre concernant les fichiers
 
 

n°1267210
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 13:28:23  profilanswer
 

parfait merci beaucoup
 
[EDIT]P130 est ce que tu peux me donner un exemple pour (par exemple) ouvre aa.txt dans C:\ ?
         merci d'avance


Message édité par magiclazy le 15-12-2005 à 13:36:48

---------------
signature du message
n°1267227
gocho
Posté le 15-12-2005 à 13:37:57  profilanswer
 

magiclazy a écrit :

ps: je cherche des tutos pour utiliser des commandes comme fopen ()parceque j'ai un peu du mal avec les man voila


 
 
Sinon tu a aussi les pages du sieur Delahaye qui sont pas mal faites je trouve (enfin elles m'ont deja servies [:petrus75]...)
Pour fopen() c'est dans le 2e lien  


 
 

n°1267231
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 13:41:07  profilanswer
 

effectivement c assez pratique les exemples ..merci


---------------
signature du message
n°1267280
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 14:02:55  profilanswer
 

un petit truc quelqun aurait un tuto ou autre pour exiplequer comment lire et utiliser ceci (en autre)
 
int printf (const char *format, ...);  
int fprintf (FILE *stream, const char *format, ...);  
int sprintf (char *str, const char *format, ...);  
int snprintf (char *str, size_t size, const char *format, ...);
 
parceque je ne sais j'amais pas quoi remplacer ..
 
merci


---------------
signature du message
n°1267320
gocho
Posté le 15-12-2005 à 14:15:53  profilanswer
 

http://www.linux-france.org/articl [...] ntf-3.html
 
Pour avoir ce genre d'infos, dans google tu tapes "man nomdelafonction" et ca va te donner les man correspondants.Meme si t'es pas copain avec l'anglais ya 99% de chances qu'il y en ait une en francais  ;)

n°1267344
Sve@r
Posté le 15-12-2005 à 14:30:19  profilanswer
 

magiclazy a écrit :

un petit truc quelqun aurait un tuto ou autre pour expliquer comment lire et utiliser ceci (en autre)
 
int printf (const char *format, ...);  
int fprintf (FILE *stream, const char *format, ...);  
int sprintf (char *str, const char *format, ...);  
int snprintf (char *str, size_t size, const char *format, ...);
 
parceque je ne sais j'amais pas quoi remplacer ..
 
merci


 
Non. Il y a des limites au tuto. Si tu sais pas ce qu'est un "const char *format" ou un "FILE *stream", alors le seul tuto valable c'est de recommencer au tout début de l'apprentissage du C et essayer de retrouver l'info que t'as sautée ce jour là...

n°1267391
Emmanuel D​elahaye
C is a sharp tool
Posté le 15-12-2005 à 14:54:50  profilanswer
 

magiclazy a écrit :

un petit truc quelqun aurait un tuto ou autre pour exiplequer comment lire et utiliser ceci (en autre)


Il est temps de suivre un vrai cours de C...
 
http://www-clips.imag.fr/commun/be [...] NSI_C.html


---------------
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/
n°1267673
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 16:39:29  profilanswer
 

super merci c'est exactement ce qu'il me fallait


---------------
signature du message
n°1267979
magiclazy
citation personnelle associé
Posté le 15-12-2005 à 22:28:51  profilanswer
 

juste un ptit truc parceque je vais pas ouvrir un topic pour sa  
comment lancer par exemple netstats -a depuis mon prog en c et enregistrer le resultat dans un txt ?


---------------
signature du message
n°1268034
Sve@r
Posté le 15-12-2005 à 23:28:59  profilanswer
 

magiclazy a écrit :

juste un ptit truc parceque je vais pas ouvrir un topic pour sa  
comment lancer par exemple netstats -a depuis mon prog en c et enregistrer le resultat dans un txt ?


 

system("netstats -a >fic.txt" )


ou bien

FILE *fin;
FILE *fout;
int c;
fin=popen("netstats -a", "r" );
fout=fopen("fic.txt", "w" );
while ((c=fgetc(fin)) != EOF)
    fputc(c, fout);
fclose(fout);
pclose(fin);


Message édité par Sve@r le 17-12-2005 à 19:39:17
n°1268108
matafan
Posté le 16-12-2005 à 06:48:13  profilanswer
 

Si tu veux faire ça à la mano (ce qui est à la fois instructif et plus efficace que les deux solutions ci-dessus), ça se passe comme ça :

Code :
  1. #include <sys/types.h>
  2. #include <sys/wait.h>
  3. #include <fcntl.h>
  4. #include <stdlib.h>
  5. #include <stdio.h>
  6. #include <unistd.h>
  7. int
  8. main()
  9. {
  10.         pid_t p;
  11.         int rc, fd;
  12.         p = fork();
  13.         if (p == -1) {
  14.                 perror("fork" );
  15.                 exit(1);
  16.         }
  17.         if (p) { /*** Parent process ***/
  18.                 wait(&rc);
  19.         } else { /*** Child process ***/
  20.                 /* Open/create output file */
  21.                 fd = open("netstat.out", O_WRONLY | O_CREAT, 00644);
  22.                 if (fd == -1) {
  23.                         perror("open" );
  24.                         exit(1);
  25.                 }
  26.                 /* Redirect stdout to output file */
  27.                 rc = dup2(fd, 1);
  28.                 if (rc == -1) {
  29.                         perror("dup2" );
  30.                         exit(1);
  31.                 }
  32.                 /* Exec netstat -a --inet */
  33.                 execl("/bin/netstat", "netstat", "-a", "--inet", NULL);
  34.                 perror("execl" );
  35.                 exit(1);
  36.         }
  37.         /*** Parent process ***/
  38.         return 0;
  39. }


Message édité par matafan le 16-12-2005 à 06:48:39
n°1268109
Elmoricq
Modérateur
Posté le 16-12-2005 à 06:51:36  profilanswer
 

Il parle de netstat sous Windows.

n°1268470
matafan
Posté le 16-12-2005 à 15:28:08  profilanswer
 

Fallait le dire... Y'a popen() sous windows ?

n°1268482
magiclazy
citation personnelle associé
Posté le 16-12-2005 à 15:33:39  profilanswer
 

sv@er PARFAIT merci bcp


---------------
signature du message
mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  [C} DO...While + un condition

 

Sujets relatifs
[GLUT] Probleme avec boucle while[VBA] While et Vlookup
à condition que la cellule soit vide !Crystal Report - Condition Not Null
Placer une condition dans un form ?Afficher les données d'un tableau avec while
un while dans un whileInsecure $ENV{PATH} while running setgid
probleme while et <select>boucle if avec condition en VBS !
Plus de sujets relatifs à : [C} DO...While + un condition


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR