创建我自己的计算器,但程序不起作用

时间:2013-09-05 10:10:05

标签: c function math calculator

我决定使用代码制作一个calcutor,但我的程序不会工作。 当我输入我的操作数和新数字时,它似乎不会扫描操作数和数字,它不会启动循环。 谢谢你的帮助。

#include <stdio.h>
#include <math.h>

float add(float x,float y);
float sub(float x,float y);
float div(float x,float y);
float exp(float x,float y);
float mult(float x,float y);
int main(){

float y,x;
char op;

printf("Type in a number\n");
scanf("%f",&x);
printf("Type in your operand and desired number\n");
scanf("%c",&op);
scanf("%f",&y);


while (!(op=='q')){
    if(op=='+'){
    printf("Your result is %.1f\n",add(x,y));
    scanf("%c",&op);
    scanf("%f",&y);
    }
    else if(op=='-'){
    printf("Your result is %.1f\n",sub(x,y));
    scanf("%c",&op);
    scanf("%f",&y);
    }
    else if(op=='*'){
    printf("Your result is %.1f\n",mult(x,y));
    scanf("%c",&op);
    scanf("%f",&y);
    }
    else if(op=='/'){
    printf("Your result is %.1f\n",div(x,y));
    scanf("%c",&op);
    scanf("%f",&y);
    }
    else if(op=='^'){
    printf("Your result is %.1f\n",exp(x,y));
    scanf("%c",&op);
    scanf("%f",&y);
    }

}

    printf("Your final result is %.1f\n",x);

        return(0);
}

float add(float x,float y){
return (x+y);

}

float sub(float x,float y){
return (x-y);
}

float div(float x,float y){
return (x/y);
}

float exp(float x,float y){
x=pow(x,y);
return(x);
}
float mult(float x,float y){
return (x*y);
}

2 个答案:

答案 0 :(得分:1)

当你做

scanf("%c",&op);

你读取输入缓冲区中的第一个字符。之前的scanf在其中留下了\n个字符,因此您可以读取该字符。

你想要做的是摆脱scanf背后的所有东西。

while(getchar()!='\n')
  continue;

在您尝试阅读之前,这将清空缓冲区。

这里每次使用scanf都会在缓冲区中留下新行字符,以便摆脱他,每次尝试从输入中读取字符时都使用上面的循环,并且你知道换行符就在那里。

答案 1 :(得分:1)

我认为正在发生的事情是在scanf("%f",&y);调用之后输入流中保留了换行符( return / 输入键)什么被存储为scanf("%c",&op);调用中的单个字符。

因此,您需要在此时丢弃换行符。最简单的方法是在需要读取单个字符时调用scanf("%c",&op); 两次。这适用于Mac和Unix。对于Windows,您可能需要读取字符次,因为Windows通常将序列“\ r \ n”视为换行序列

为了便于携带,你可以使用这样的循环:

do {
    op = getchar();
} while (op == '\n' || op == '\r');

然后移除scanf("%c",&op);。这个循环取而代之。


另一种选择是要求scanf自己丢弃初始空格。

scanf(" %c",&op);
//     ^ space

另外,请参阅我对this very similar question的回答。