在main()参数中使用*作为命令行计算器

时间:2019-07-10 16:51:39

标签: c command-line strcmp

我正在做一个作业问题,即使用主函数中的argc和argv []参数创建一个计算器。

我们本来应该做的就是创建一个包含我要使用的运算符的char指针数组。 这就是我所拥有的:

const int OTabMax = 10;
const char *OTab[] = {
                      "+",
                      "-",
                      "*",
                      "/",
                      "quad",
                      "wurz",
                      "sinR",
                      "sinG",
                      "cosR",
                      "cosG" 
                     };

int OTabCheck(char S[]) // char *S
{
    int n;
    for (n = 0; n < OTabMax; n++){
        if (strcmp(S, OTab[n]) == 0) {break;}
    }
return n;
}

它返回一个数字,具体取决于使用的运算符,这将在进行计算的切换情况下进行。

看起来像这样:

switch(key){

            case 0:
            break;

            case 1:
            break;

            case 2:
                x = atof(argv[1]);
                y = atof(argv[3]);
                z = 0;
                z = x*y;
                printf("%f * %f = %f\n",x,y,z);
            break;

            case 3-8;
            break;

            case 9:
            break;

            default: printf("Wrong input!\n"); exit(0); break;
        }

有问题的情况是情况2:每当我进行计算时,例如使用./"program_name" 2 * 2通过终端调用程序

它的printf为2.000000 * 0.000000 = 2.000000

这是MRE:

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

    const int OTabMax = 10;
    const char *OTab[] = {
                            "+",
                            "-",
                            "*",
                            "/",
                            "quad",
                            "wurz",
                            "sinR",
                            "sinG",
                            "cosR",
                            "cosG" };

int OTabCheck(char S[]) // char *S
{
    int n;
    for (n = 0; n < OTabMax; n++){
        if (strcmp(S, OTab[n]) == 0) {break;}
    }
    return n;
}

int main(int argc,char *argv[]){
    float x = 0;
    float y = 0;
    float z = 0;
    int key = 0;

    if(argc < 3){
        exit(0);
    }

    if(argc == 4){

    key = OTabCheck(argv[2]);

    }else if(argc == 3){
    key = OTabCheck(argv[1]);

    }
        switch(key){

            case 2:
                x = atof(argv[1]);
                y = atof(argv[3]);
                z = 0;
                z = x*y;
                printf("%f * %f = %f\n",x,y,z);
                exit(0);
            break;

            default: printf("Wrong input!\n"); exit(0); break;
        }

}

0 个答案:

没有答案