-2

当用户想要输入时,有什么方法可以让我输入用户的数字以及用户选择的任何算术运算符。我基本上是在尝试制作一种计算器,用户将首先输入数字,最后将运算符应用于它。但是没有任何固定限制,用户将首先输入多少个数字。它的用户愿望。我的程序应该自己猜测它是字符输入还是整数输入。可能吗 ??

4

5 回答 5

1

这只是对简单算术类编程问题的概述。

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

有关 strtol() 的更多信息

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

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

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

于 2012-12-13T14:14:41.567 回答
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;
}
于 2012-12-13T15:09:19.767 回答
0

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

运算符应该是一个字符减号或不是 0~9 字符。

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

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

于 2012-12-13T14:15:41.713 回答
0

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

或者您可以做的是逐步输入数字,然后是运算符,然后是数字:)

于 2012-12-13T14:33:08.197 回答
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])

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

于 2012-12-13T14:40:44.803 回答