在计算器程序中使用ASCII转换进行编程

时间:2017-06-27 00:27:44

标签: c

我的简单计算器程序需要一些帮助。它似乎工作正常,直到我使用*符号进行乘法。当我使用*符号时,它变为99而不是42的ASCII等价物。它期望的参数是整数,运算符(+-*/)和另一个整数。

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


/*
void usage() {
    printf("This is a calculator program, just put in to numbers and and operator\n");
    printf("Example:\n\t2 + 2\n");

}
*/

int main(int argc, char *argv[]) {

    int first_number, second_number;
    int symbol;
    int sum;

    first_number = atoi(argv[1]);
    second_number = atoi(argv[3]);
    symbol = (int)*argv[2];


    printf("symbol varable = %d\n", symbol); // debugging for argv[2]

    if (symbol == 43 ) {

        sum = first_number + second_number;

        printf("sum = %d\n", sum);
    }

    else if (symbol == 45 ) {

        sum = first_number - second_number;

        printf("sum = %d\n", sum);
    }

    else if (symbol == 42) {

        sum = first_number * second_number;

        printf("sum = %d\n", sum);

    }
     else if (symbol == 47) {

        sum = first_number / second_number;

        printf("sum = %d\n", sum);
    }
    return 0;
}

1 个答案:

答案 0 :(得分:3)

问题与您的代码无关。

使用命令行参数(如12 * 12)运行程序时,您在命令行中放置一个通配符,shell会看到*并将其替换为目录中每个文件名的列表 - 如果符号出现99,则目录中的第一个程序必须以小写c开头。

要使其工作,请转义命令行参数,例如12 '*' 1212 \* 12,或完全禁用文件名通配,如下面的答案所示:Stop shell wildcard character expansion?