【问题标题】:How to read * from command line in C如何从 C 中的命令行读取 *
【发布时间】:2015-12-23 06:46:04
【问题描述】:

我会直奔主题。这是我的代码,我想从命令行参数中读取 '*' 字符,但它无法正常工作。我希望你能解释我做错了什么。

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

int sum(int, int);
int rest(int, int);
int division(int, int);
int mult(int, int);
int module(int, int);

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

    char operator;
    int number1;
    int number2;
    int result;

    if(argc != 4){
        printf("Wrong parameter quantity (%d of 3 needed)\n", argc-1);
        return -1;
    }

    number1 = atoi(argv[1]);
    operator = *argv[2];
    number2 = atoi(argv[3]);

    switch(operator){
        case '+':
                result = sum(number1, number2);
                printf("%d %c %d = %d\n", number1, operator, number2, result);
                break;
        case '-':
                result = rest(number1, number2);
                printf("%d %c %d = %d\n", number1, operator, number2, result);
                break;
        case '/':
                result = division(number1, number2);
                printf("%d %c %d = %d\n", number1, operator, number2, result);
                break;
        case '*':
                result = mult(number1, number2);
                printf("%d %c %d = %d\n", number1, operator, number2, result);
                break;
        case '%':
                result = module(number1, number2);
                printf("%d %c %d = %d\n", number1, operator, number2, result);
                break;
        default:
                printf("Error. Wrong operator inserted (%d, %c)\n", operator, operator);
                return -2;
    }

    return 0;
}

int sum(number1, number2){
    return number1 + number2;
}

int rest(number1, number2){
    return number1 - number2;
}

int division(number1, number2){
    return number1 / number2;
}

int mult(number1, number2){
    return number1 * number2;
}

int module(number1, number2){
    return number1 % number2;
}

我知道我的错误是在这一行operator = *argv[2]; 但我不知道当'*' 字符通过命令行参数传递时会发生什么。对于所有其他符号(+、-、/、%),一切正常。我在 Ubuntu 中编写代码并使用 gcc 在命令行中编译。

【问题讨论】:

  • 我使用了 42,它是 * 的 ASCII 码,但它也不起作用。感谢您的快速回复。
  • 您的终端可能会用您目录中的所有文件替换“*”。当我输入./your_program 5 \* 7 时,这对我有用
  • 这是link发生的事情的链接

标签: c parsing command-line


【解决方案1】:

问题不在您的程序中。这就是你所说的。

UNIX/Linux shell 自动在命令行上将* 扩展为当前目录中的所有文件。为防止这种情况,您需要引用它。

所以不要这样做

./prog 3 * 4

这样做:

./prod 3 "*" 4

或者这个:

./prod 3 \* 4

【讨论】:

  • 天哪……它奏效了。非常感谢你的回答,我的头要爆炸了
猜你喜欢
  • 1970-01-01
  • 2011-03-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 2016-05-09
  • 2016-02-20
  • 2016-05-24
相关资源
最近更新 更多