Rechercher : dans
Par :

Question en c

Dernière réponse le 22 oct 2009 à 00:45:30 Moustiquet, le 20 oct 2009 à 04:44:19 
 Signaler ce message aux modérateurs

Bonjour, Dans un programme j'ai ces lignes
...const int BORNE1=0;
const int BORNE2=20 ;/*Declaration des caractere*/...

....valide=(nombre==BORNE1||nombre<=BORNE2);
{ if(!valide)
printf("Vous etes hors limite recommencer\n");
while(!valide);}.....
Lorsque j'écris un nombre plus grans que vingt on m'indique que je suis hors limite, mais on me propose pas de recommencer même si j'ai
......printf("Voulez-vous continuer?O/N");/*Serie d'operation pour permettre a la boucle de se refaire*/
scanf("%c",reponse);
reponse=toupper(reponse);

}while(reponse=='O'||reponse=='o');
printf("Appuyer sur une touche pour continuer");
getch();/*Instrution pour un seul caractere*/
return 0;.......et lorsque j'écris 0, on me dit pas que je suis Hors limite Merci de votre aide
}

Configuration: SustemeMicosoft Windows version 5.1.2600 Srevive 2 Processeurx86 Family 15 modele4 BiosPhoenix Tech memoire physique totale 512

Meilleures réponses pour « Question en c » dans :
Langage C++ - Les types de données Voir Les types de données Les données manipulées en langage C++, comme en langage C, sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître...
Les structures en langage C Voir Différence entre une structure et un tableau Un tableau permet de regrouper des éléments de même type, c'est-à-dire codés sur le même nombre de bits et de la même façon. Toutefois, il est généralement utile de pouvoir rassembler des éléments de...
Les chaînes de caractères en C++ Voir Qu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C++, une...
La compilation et les modules en C et en C++ VoirCet article a pour vocation d'introduire les notions de bases de la compilation en C et en C++ et de la programmation modulaire. Il permet de mieux comprendre les messages d'erreur du compilateur. Les notions abordées ici sont indépendantes du...
3D Secure / Verified by Visa / SecureCode: Qu'est-ce que c'est ? VoirDepuis octobre 2008, les banques et commerçants en ligne ont commencé à adopter le système 3DSecure pour les paiements sur Internet. Qu'est-ce que c'est ? 3DSecure est appelé "Verified by Visa" chez Visa, et "SecureCode" chez Mastercard. (Les logos...
[Langage C] C/C++ Erreur de segmentation VoirQu'est ce qu'une erreur de segmentation Vous êtes en train de développer une application sous Linux en C/C++. Tout va bien, ça compile, les oiseaux chantent. Donc vous lancez votre application pour la tester. Et vous obtenez l'un de ces deux...
Télécharger Visual C++ Express VoirVisual C++ Express est une version "gratuite" et allégée de Visual Studio ; l'utilisation requiert l'inscription sur le site de Microsoft. Cet environnement de développement permet de créer des application Win32 ou du .NET C.
Langage C - Les opérateurs VoirQu'est-ce qu'un opérateur ? Les opérateurs sont des symboles qui permettent de manipuler des variables, c'est-à-dire effectuer des opérations, les évaluer, etc. On distingue plusieurs types d'opérateurs : les opérateurs de calcul les opérateurs...
Langage C - Les types de données VoirLes types de données Les données manipulées en langage C sont typées, c'est-à-dire que pour chaque donnée que l'on utilise (dans les variables par exemple) il faut préciser le type de donnée, ce qui permet de connaître l'occupation mémoire (le...
Langage C - Les chaînes de caractères VoirQu'est-ce qu'une chaîne de caractères ? Une chaîne de caractères (appelée string en anglais) est une suite de caractères, c'est-à-dire un ensemble de symboles faisant partie du jeu de caractères, défini par le code ASCII. En langage C, une chaîne...

1

edelahaye, le 20 oct 2009 à 07:38:34

Ton code est très incomplet et incompilable.

Je suggère que tu postes un code compilable qui montre exactement le problème.
Music only !

Répondre à edelahaye

2

Char Snipeur, le 20 oct 2009 à 08:19:24

While(!valide);
HO !!! la jolie boucle inifinie que voilà !!! ;)
Il y a au moins une erreur là si tu n'as pas fait d'erreur de recopie. Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

3

Pilow, le 20 oct 2009 à 08:25:55

Scanf("%c",reponse);

Erreur numero deux ? :P « Informatique : Alliance d'une science inexacte et d'une activité humaine faillible.»
« Si le déboguage est l’art d’enlever les bogues, alors la programmation doit être l’art de les créer.»

Répondre à Pilow

4

Char Snipeur, le 20 oct 2009 à 08:43:17

Pour 0, c'est normal. réfléchi mieux à ta logique booléenne. (et de 3 erreurs, en 5 lignes de codes. :o) Salutation ! (il faut bien que vous compreniez que j'ai TOUJ­OURS raison)
Char Snipeur

Répondre à Char Snipeur

5

Moustiquet, le 21 oct 2009 à 05:17:42

Je pensais que en validant mes bornes le progarmme me demanderait (apres)avoir dit que je suis hors limite.Il me demanderait une autre valeur entre 1 et 20, mais ce n,est pas le cas.
Et ainsi continuer avec une autre valeur.
Donc Je me demnade comment valider et continuer le programme.

Répondre à Moustiquet

6

Char Snipeur, le 21 oct 2009 à 08:04:00

valide=false;
while(!valide){
valide=(nombre>BORNE1&&nombre<=BORNE2);
 if(!valide)
     printf("Vous etes hors limite recommencer\n");
}
voilà ce qui peut fonctionner. Revoi ta logique. Salutation ! (il faut bien que vous compreniez que j'ai TOUJOURS raison)
Char Snipeur

Répondre à Char Snipeur

7

Moustiquet, le 21 oct 2009 à 20:33:29

Alors voici mon programme au complet. Remarquer que mon problème est que lorsque je veut faire une validation pour que mon programme est hors limite, il me dit que je suis hors limite et me repose la question entrer un autre valeur. Merci de votre aide : #include <stdio.h>

int main()
{
const int BORNE1=0;
const int BORNE2=20 ;/*Declaration des caractere*/
int ligne,col;
int nombre,valide;
char reponse;


/*ligne et colone*/
do{/*Utilisation de la boucle do..while"*/
printf("Entrez un nombre de 1 a 20:");//Choix de nombre par l'utilisateur*/
fflush(stdin);/*Vider la memoire tampon*/
scanf("%d",&nombre);/*Deposer la valeur demander a l'utilisateur*/
/*Defenir la zone de fabrication du triangle permise*/
valide=(nombre==BORNE1||nombre<=BORNE2);
if (!valide)
printf("Vous etes hors limite recommencer\n");





for/*Utilisation de for pour choisir les caractere numerique des ligne*/
(ligne=1; ligne<=nombre;ligne++){/*initialisation
/*pour colone varie de ligne jusqu'à 20 ou selon le nombre de depart choisi*/
for(col=ligne; col<= nombre; col++)

printf("%d", col);
printf ("\n");
/*Marque la fin dela boucle do*/
}printf("Voulez-vous continuer?O/N\n");/*Serie d'operation pour permettre a la boucle de se refaire*/
scanf("%c",&reponse);
reponse=toupper(reponse);
} while(reponse=='O');
printf("Appuyer sur une touche pour continuer");
getch();/*Instrution pour un seul caractere*/
return 0;
}

Répondre à Moustiquet

8

Moustiquet, le 21 oct 2009 à 20:40:37

Excuser, mais je me suis mal exprimé. Lorsque je veut faire une validation pour que le programme accepte seulement les valeurs de 0 a 20 et qu'il me dise lorsque je suis hors limite et me reponse la question "Voulez-vous enter un autre valeur. C'est cela qui ne fontionne pas. Merci Excusé pour la confusion au début de mon message précédent

Répondre à Moustiquet

9

 edelahaye, le 22 oct 2009 à 00:45:30
  • +1

" fflush (stdin);" n'existe pas. fflush(), n'est défini que pour les flux sortants...

L'usage correct de scanf() est délicat. Il faut vider le flux entrant si le dernier caractère lu n'est pas '\n' :

static void purge(void)
{
   int c;
   while ((c = getchar()) != '\n' && c != EOF)
   {
   }
}

Cette fonction doit être appelée après chaque usage de scanf() avec "%d" et "%s", par exemple. Pour "%c", uniquement si le dernier caractère lu n'est pas '\n'...

On est aussi censés tester la valeur retournée par scanf(). Elle indique le nombre de conversions réussies. En cas d'erreur, il y a un traitement à faire...

Idem avec getchar()...

getch() n'est pas standard.

Cette condition
valide = (nombre == BORNE1 || nombre <= BORNE2);

est redondante et ne teste pas la limite basse. Il faut que la vaieur soit >= à 1 et <= à 20, ce qui se code autrement, (je te laisse trouver, tout est dit ...). attention les bornes sont donc 1 et 20 et non 0 et 20 ...

Il y a un autre problème de logique. Si je mets 21, j'ai bien l'indication 'hors limite', mais le triangle est quand même dessiné... Il doit falloir un else au if ...

Une fois corrigé, ça a l'air de fonctionner correctement ...
Entrez un nombre de 1 a 20:21
Vous etes hors limite recommencer
Voulez-vous continuer?O/N
o
Entrez un nombre de 1 a 20:0
Vous etes hors limite recommencer
Voulez-vous continuer?O/N
o
Entrez un nombre de 1 a 20:5
12345
2345
345
45
5
Voulez-vous continuer?O/N
n
Appuyer sur une touche pour continuer

Process returned 0 (0x0)   execution time : 18.956 s
Press any key to continue.

Code à ne regarder que si tu es planté ou pour vérifier:
#include <stdio.h>
#include <string.h>

static void purge (void)
{
   int c;
   while ((c = getchar ()) != '\n' && c != EOF)
   {
   }
}

int main (void)
{
   const int BORNE1 = 1;
/* Declaration des caractere */
   const int BORNE2 = 20;
   int ligne, col;
   int nombre, valide;
   char reponse;

/* ligne et colone*/
   do
/* Utilisation de la boucle do..while" */
   {
/* Choix de nombre par l'utilisateur */
      printf ("Entrez un nombre de 1 a 20:");

/* Deposer la valeur demander a l'utilisateur */
      scanf ("%d", &nombre);
      purge ();

/* Definir la zone de fabrication du triangle permise*/
      valide = nombre >= BORNE1 && nombre <= BORNE2;
      if (!valide)
         printf ("Vous etes hors limite recommencer\n");
      else
      {
/* Utilisation de for pour choisir les caractere numerique des ligne */
         for (ligne = 1; ligne <= nombre; ligne++)
/* initialisation */
         {
            /* pour colonne varie de ligne jusqu'à 20 ou selon le nombre de depart choisi */
            for (col = ligne; col <= nombre; col++)

               printf ("%d", col);
            printf ("\n");
/* Marque la fin dela boucle do*/
         }
      }
/* Serie d'operation pour permettre a la boucle de se refaire */
      printf ("Voulez-vous continuer?O/N\n");
      scanf ("%c", &reponse);
      if (reponse != '\n')
      {
         purge ();
      }
      reponse = toupper (reponse);
   }
   while (reponse == 'O');

   printf ("Appuyer sur une touche pour continuer");
   /* Instrution pour un seul caractere */
   {
      int c = getchar ();
      if (c != '\n')
      {
         purge ();
      }
   }
   return 0;
}
Emmanuel Delahaye
Music only !

Répondre à edelahaye