Моя программа не запрашивает оператора во второй раз - PullRequest
2 голосов
/ 09 августа 2010
#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);
    }
}

Выход:

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

Ответы [ 3 ]

2 голосов
/ 09 августа 2010

scanf("%d",... будет считывать число (заранее пропуская пробелы), но оставляя новую строку в потоке ввода. scanf("%c",... прочитает первый символ и не пропускает пробел.

Одна простая модификация заключается в использовании

scanf(" %c", &a);

Это скажет scanf пропустить все пробелы перед символом.

2 голосов
/ 09 августа 2010

Что из-за функции scanf width param "% c", после 1-го цикла времени, в строке scanf("%d",&c);, например + , в символе end-line есть входной поток, затем второй цикл, scanf получает символ end-line в качестве входных данных и анализирует его как a ; Чтобы это исправить, вы можете добавить строку scanf("%c"); сразу после scanf("%d",&c);

0 голосов
/ 09 августа 2010

посмотрите на ошибку scanf в c при чтении символа

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...