Использование * в параметрах main () для калькулятора командной строки - PullRequest
2 голосов
/ 10 июля 2019

Я делаю домашнее задание, которое заключается в создании калькулятора с использованием параметров 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;
        }

}
...