probleme bizarre en C

probleme bizarre en C - Programmation

Marsh Posté le 17-10-2001 à 10:15:38    

Ce petit bout de programme ne marche pas pouvez vous m'expliquer pourquoi le scanf ne s'execute qu'une fois, apres il met tout seul un retour chariot sans que je ne tape rien!!!
Si vous ne me croyez pas essayez!!!!
 
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
 
void main(void)
{
 int test,x;
 
 Cls();
 printf("\nVoulez vous :" );
 printf("\n\t1 - lire un fichier" );
 printf("\n\t2 - saisir des donnees au clavier." );
 printf("\n\t3 - trier les donnees." );
 printf("\n\t4 - ecrire les donnees dans le fichier" );
 printf("\n\t5 - afficher les donnees du tableau" );
 printf("\n\t6 - afficher les donnees du fichier" );
 printf("\n\t7 - quitter le programme\n" );
 while( (test=scanf("%d",&x)) == 0)
 {
  printf("\n veuillez rentrer une valeur correcte\n" );
  test=NULL;
 }
}
 
 
merci d'avance.

Reply

Marsh Posté le 17-10-2001 à 10:15:38   

Reply

Marsh Posté le 17-10-2001 à 10:26:36    

heuh tu veux tester quoi exactement ?
 
parce que la tu compare le nombre de caractere lu avec 0.....

Reply

Marsh Posté le 17-10-2001 à 10:52:22    

ecrire ce genre de chose c'est chercher les ennuis...
 
while( (test=scanf("%d",&x)) == 0)

Reply

Marsh Posté le 17-10-2001 à 18:43:42    

Pas étonant que ça marche pas quand on fait nimporte quoi ;)
Bon tréve de plaisanterie si j'ai bien compris tu essaye de faire un menu mais tu t'y prend comme un pied (désolé mais c un peu ça) déjà ta varible test ne sert à rien, et comparé le résultat de scanf n'as pas vraiment de sens étant donné qu'elle renvoie au mieux EOF en cas de pépin, valeur qui dépend du système, et puis honétement personne ne teste jamais cette valeure de retour (même si c pas bien :) )
 
En gros voilà comment tu devrais faire:
 
#include <stdio.h>  
#include <stdlib.h>  
#include <math.h>  
#include <string.h>  
 
 
void main(void)  
{  
  int ok,x;
 
  ok=0;  
 
  Cls();  
  printf("\nVoulez vous :" );  
  printf("\n\t1 - lire un fichier" );  
  printf("\n\t2 - saisir des donnees au clavier." );  
  printf("\n\t3 - trier les donnees." );  
  printf("\n\t4 - ecrire les donnees dans le fichier" );  
  printf("\n\t5 - afficher les donnees du tableau" );  
  printf("\n\t6 - afficher les donnees du fichier" );  
  printf("\n\t7 - quitter le programme\n" );  
 
  while(!ok)     /*Tant que ok vaut 0 de base le 0 est faut et tout autre valeure est vrai le ! signifie 'not' donc while(!ok) tant que ok faux */
   {
      scanf("%d",&x);
      fflush(stdin) /*vide le buffer d'entrée, plus propre et évite des erreures ultérieures*/
      switch(x)
       {
 
            case 1:   /*fonction à appeler pour traiter le cas 1*/
                      break;
            /* autres case à insérer*/
            case 7:   ok=1;
                      break;
            default:  printf("\n veuillez rentrer une valeur correcte\n" );  
                      break;
       }  
 
}

Reply

Marsh Posté le 17-10-2001 à 18:43:57    

Pas étonant que ça marche pas quand on fait nimporte quoi ;)
Bon tréve de plaisanterie si j'ai bien compris tu essaye de faire un menu mais tu t'y prend comme un pied (désolé mais c un peu ça) déjà ta varible test ne sert à rien, et comparé le résultat de scanf n'as pas vraiment de sens étant donné qu'elle renvoie au mieux EOF en cas de pépin, valeur qui dépend du système, et puis honétement personne ne teste jamais cette valeure de retour (même si c pas bien :) )
 
En gros voilà comment tu devrais faire:
 
#include <stdio.h>  
#include <stdlib.h>  
#include <math.h>  
#include <string.h>  
 
 
void main(void)  
{  
  int ok,x;
 
  ok=0;  
 
  Cls();  
  printf("\nVoulez vous :" );  
  printf("\n\t1 - lire un fichier" );  
  printf("\n\t2 - saisir des donnees au clavier." );  
  printf("\n\t3 - trier les donnees." );  
  printf("\n\t4 - ecrire les donnees dans le fichier" );  
  printf("\n\t5 - afficher les donnees du tableau" );  
  printf("\n\t6 - afficher les donnees du fichier" );  
  printf("\n\t7 - quitter le programme\n" );  
 
  while(!ok)     /*Tant que ok vaut 0 de base le 0 est faut et tout autre valeure est vrai le ! signifie 'not' donc while(!ok) tant que ok faux */
   {
      scanf("%d",&x);
      fflush(stdin) /*vide le buffer d'entrée, plus propre et évite des erreures ultérieures*/
      switch(x)
       {
 
            case 1:   /*fonction à appeler pour traiter le cas 1*/
                      break;
            /* autres case à insérer*/
            case 7:   ok=1;
                      break;
            default:  printf("\n veuillez rentrer une valeur correcte\n" );  
                      break;
       }  
 
}

Reply

Marsh Posté le 17-10-2001 à 18:43:55    

Pas étonant que ça marche pas quand on fait nimporte quoi ;)
Bon tréve de plaisanterie si j'ai bien compris tu essaye de faire un menu mais tu t'y prend comme un pied (désolé mais c un peu ça) déjà ta varible test ne sert à rien, et comparé le résultat de scanf n'as pas vraiment de sens étant donné qu'elle renvoie au mieux EOF en cas de pépin, valeur qui dépend du système, et puis honétement personne ne teste jamais cette valeure de retour (même si c pas bien :) )
 
En gros voilà comment tu devrais faire:
 
#include <stdio.h>  
#include <stdlib.h>  
#include <math.h>  
#include <string.h>  
 
 
void main(void)  
{  
  int ok,x;
 
  ok=0;  
 
  Cls();  
  printf("\nVoulez vous :" );  
  printf("\n\t1 - lire un fichier" );  
  printf("\n\t2 - saisir des donnees au clavier." );  
  printf("\n\t3 - trier les donnees." );  
  printf("\n\t4 - ecrire les donnees dans le fichier" );  
  printf("\n\t5 - afficher les donnees du tableau" );  
  printf("\n\t6 - afficher les donnees du fichier" );  
  printf("\n\t7 - quitter le programme\n" );  
 
  while(!ok)     /*Tant que ok vaut 0 de base le 0 est faut et tout autre valeure est vrai le ! signifie 'not' donc while(!ok) tant que ok faux */
   {
      scanf("%d",&x);
      fflush(stdin) /*vide le buffer d'entrée, plus propre et évite des erreures ultérieures*/
      switch(x)
       {
 
            case 1:   /*fonction à appeler pour traiter le cas 1*/
                      break;
            /* autres case à insérer*/
            case 7:   ok=1;
                      break;
            default:  printf("\n veuillez rentrer une valeur correcte\n" );  
                      break;
       }  
 
}

Reply

Marsh Posté le 17-10-2001 à 18:56:30    

Désolé pour les trois messages: un petit problème au moment de l'envoie.
 
PS: J'ai oublié une acolade dans le code

Reply

Marsh Posté le 18-10-2001 à 00:05:37    

si tu tiens à garder ta variable test, tu peux utiliser la fonction getchar().
 
 
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>
 
 
void main(void)
{
int test,x;
 
Cls();
printf("\nVoulez vous :" );
printf("\n\t1 - lire un fichier" );
printf("\n\t2 - saisir des donnees au clavier." );
printf("\n\t3 - trier les donnees." );
printf("\n\t4 - ecrire les donnees dans le fichier" );
printf("\n\t5 - afficher les donnees du tableau" );
printf("\n\t6 - afficher les donnees du fichier" );
printf("\n\t7 - quitter le programme\n" );
while( (test=getchar()) == '0';)
{
 printf("\n veuillez rentrer une valeur correcte\n" );
 test=NULL;
}
/*là tu mets le switch*/
}

Reply

Marsh Posté le 18-10-2001 à 00:07:34    

tant que j' y suis, faut penser à virer test=NULL

Reply

Marsh Posté le 18-10-2001 à 11:28:21    

En reponse a leto2 il faudrait peut etre mettre les printf dans la boucle!!!

Reply

Marsh Posté le 18-10-2001 à 11:28:21   

Reply

Marsh Posté le 18-10-2001 à 21:01:33    

Ouai enfin ça c toi qui voit comment tu veux faire et quel aspect tu veux donner à ton menu (si tu met les printf dans la boucle met aussi le cls sinon ça va pas être joli ;) )

Reply

Marsh Posté le 18-10-2001 à 21:03:22    

merci

Reply

Marsh Posté le 18-10-2001 à 21:03:47    

Pour répondre à la solution de nikewlas si l'utilisateur rentre un nombre supperieur à 7 ça va sortir de la boucle et passer dans les tests switch et je pense pas que ça cole à ce que veut faire magot

Reply

Sujets relatifs:

Leave a Replay

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