用于存储整数和算术运算符的数据类型?

时间:2012-12-13 14:08:26

标签: c rpn

当用户想要输入时,我是否有任何方式可以从用户以及用户选择的任何算术运算符输入数字。我基本上试图制作一种计算器,用户首先输入数字,最后输入适用于它的运算符。但是没有任何修复限制,用户将首先输入多少数字。它的用户愿望。我的程序应该自己猜测它是字符输入还是整数输入。有可能??

5 个答案:

答案 0 :(得分:1)

这只是一个简单算术编程问题的概述。

将输入作为字符并存储在char数组缓冲区中。 然后使用strtol,您可以将其转换为long int

For more about strtol()

还将运算符作为字符数组,其中每个索引处的字符将表示运算符。

应用switch - case并根据这些情况(操作员+-等)执行操作。

其他方法是将infix arithmetic notations转换为postfix notations并使用stacks并简单地解决。在这种情况下,运算符优先级不会出现问题,因为您已经应用了将操作符存储到堆栈中的逻辑,只需逐个弹出并执行操作。

答案 1 :(得分:1)

假设用户只能输入以下操作格式之一:

x + y
x * y
x - y
x / y

以下是如何做到的:

#include<stdio.h>
#include<stdlib.h>

int main () {
    int x, y;
    char op;

    printf ("Enter your Expression The Format should be One of the following:\nx + y\nx - y\nx * y\nx / y\n");
    if (scanf("%d %c %d",&x,&op,&y)<3) {
        printf("Wrong Expression\n");
        return 0;
    }
    switch (op) {
        case '+':
            printf("%d + %d = %d\n",x,y,x+y );
            break;
        case '-':
            printf("%d - %d = %d\n",x,y,x-y );
            break;
        case '*':
            printf("%d * %d = %d\n",x,y,x*y );
            break;
        case '/':
            printf("%d / %d = %d\n",x,y,x/y );
            break;
        default:
            printf("Invalid operator %c\n",op);
    }
    return 0;
}

答案 2 :(得分:0)

应以0~9或减号开始整数。

操作符应为一个字符减号或0~9字符以外的其他字符。

将输入作为字符串,判断它是运算符还是整数,然后使用atoi将字符串转换为整数。

如果你有能力编写计算器,那对你来说应该是一项简单的任务。

答案 3 :(得分:0)

我的建议是构建一个OPP(对象优先级解析器)来操作用户输入的字符串。 当您将输入作为字符串输入时,用户有权输入整个代数方程以及算术运算符,因为它们仅被视为字符。然后你可以将它转换为char数组,对其执行OPP操作。 http://code.google.com/p/expressionparser/

或者您可以做的是逐步输入数字,然后是操作员然后编号:)

答案 4 :(得分:0)

你没有真正列出许多细节或任何你想如何处理这个问题的例子,所以我不能给你更好的建议。由于您不知道订单或输入数量(数字/字符),建议将其作为字符串:

char *expression_buf = NULL;
scanf("%m[^\n]", expression_buf); // grab any number of characters/digits with spaces
//do some postfix stuff
free(expression_buf);

然后你可以弄清楚什么是数字,什么不是:

#include <ctype.h>
isdigit(expression_buf[index])

这几乎是你需要的所有工具。然后弹出数字/运算符并按顺序应用它们。将它们放在堆栈上将有助于您以正确的顺序将它们弹回。