OS X上的程序问题,但C中的Windows上没有

时间:2014-11-07 17:26:13

标签: c xcode windows macos

我正在C中的XCode上做一个小型计算器程序(在macbook上)。我在这里给你代码:

#include<stdio.h>


int readOpnd(){
   int opnd;
   printf("\nInput Operand > ");
   scanf("%d", &opnd);
   fflush(stdin);
   return opnd;
}


char readOp2(){
   char op;
   printf("\nInput Operator > ");
   scanf("%c", &op);
   if (op != '+' && op != '-' && op != '*' && op != '/'){
      fflush(stdin);
      return readOp2();
   }
   fflush(stdin);
   return op;
}

char readOp(){
   char op;
   printf("\nInput Operator > ");
   scanf("%c", &op);
   while (op != '+' && op != '-' && op != '*' && op != '/'){
      printf("\nIncorrect operator, try again >");
      scanf("%c", &op);
      fflush(stdin);
   }
   fflush(stdin);
   return op;
}


int apply(char op, int opnd1, int opnd2 ){

   if (op == '+')
      return opnd1+opnd2;
   if (op == '-')
      return opnd1 - opnd2;
   if (op == '*')
      return opnd1*opnd2;
   if (op == '/')
      return opnd1/opnd2;
   else{
      printf("invalid use of apply function");
      exit(1);
   }
}

int main(){
    char op;
    int result, opnd1, opnd2;

    while(1){
       opnd1 =  readOpnd();
       opnd2 = readOpnd();
       op = readOp();
       result = apply(op, opnd1, opnd2);
       printf("\nresult = %d", result);
       while(1){
          opnd2 = readOpnd();
          op = readOp();
          result = apply(op, result, opnd2);
          printf("\nresult = %d", result);
       }
    }   
    exit(0);
}

然而,当我执行它时,我遇到了问题。我把第一个操作数然后是第二个操作数,然后我自动输出消息&#34;不正确的操作符,再试一次&#34;没有输入操作员。 例如:
输入操作数&gt; 6

输入操作数&gt; 4

输入运算符&gt;

操作员不正确,请再试一次&gt;

最奇怪的是,我在Windows计算机上没有这个问题,我没有&#34;不正确的运营商,尝试agin&#34;消息和代码完美地工作。我也尝试在我的mac控制台上运行它,但我遇到了同样的问题。

请问您有解决这个问题的方法吗?

提前致谢

1 个答案:

答案 0 :(得分:1)

操作员角色的scanf正在从最后一个输入读取'\n'

do {
   scanf("%c", &op);
} while (op == '\n');

您无法以see here的方式刷新stdin,{{3}}。