2010-08-09 3 views
2
#include<stdio.h> 
#include<stdlib.h> 

main(){ 
    int b,c,r,d; 
    char a; 

    while(1){ 

    printf("Enter the operator\n"); 

      scanf("%c",&a); 

      if(a=='+') d=1; 
      if(a=='-') d=2; 
      if(a=='&') d=3; 
      if(a=='|') d=4; 
      if(a=='.') d=5; 

      printf("Enter the operands\n"); 

      scanf("%d",&b); 
      scanf("%d",&c); 

      switch(d){ 
      case 1:r=c+b; 
      break; 
      case 2:r=c-b; 
      break; 
      case 3:r=c&b; 
      break; 
      case 4:r=c|b; 
      break; 
      case 5:exit(0); 
      deafult:printf("Enter a valid operator"); 
     } 
     printf("Result = %d\n",r); 
    } 
} 

Sortie:Mon programme ne demande pas à l'opérateur la deuxième fois

Enter the operator 
+ 
Enter the operands 
8 
7 
Result = 15 
Enter the operator 
Enter the operands 
+0

s'il vous plaît quelqu'un répondre à ce qui pourrait être la raison – abhinav

Répondre

2

qu'en raison de la fonction largeur scanf PARAM « % c », après la boucle 1ère fois, à la ligne scanf("%d",&c);, comme +, il y a un caractère de fin ligne dans le courant d'entrée, puis la deuxième boucle, scanf obtenir le caractère fin de ligne comme entrée et l'analyser pour un; Pour résoudre ce problème, vous pouvez ajouter un droit de ligne scanf("%c"); après scanf("%d",&c);

+1

pourquoi ne pas les opérations scanf suivantes (pour obtenir opérandes) lire de cette nouvelle ligne? – sje397

+0

Il y a plusieurs façons de résoudre ce genre de problèmes, donc je pense que la raison est plus importante. En sachant cela, nous pouvons trouver de nombreuses solutions. Voici un moyen simple de corriger ce code sans modifier le code actuel, à mon avis. –

+0

Mais ce n'est pas tout à fait la raison. La nouvelle ligne n'est pas restée du premier 'scanf ("% c "...', mais du dernier 'scanf ("% d "...'. – sje397

2

scanf("%d",... va lire un certain nombre (sauter des espaces à l'avance) mais laisser la nouvelle ligne sur le flux d'entrée. scanf("%c",... lit le premier caractère et n'oublie pas les espaces.

Une modification simple est d'utiliser

scanf(" %c", &a); 

Cela indiquera scanf sauter les espaces blancs avant le caractère.

Questions connexes