Command line 基本编程帮助

Command line 基本编程帮助,command-line,c,Command Line,C,我觉得这个问题更多的是我对指针的理解,但这里是。我想用C语言创建一个系统程序,它执行诸如数学运算符value1 value2之类的计算。示例数学+1 2。这将在屏幕上生成3。我在比较或求和这些数字时遇到困难。以下是我到目前为止的情况: #包括 #包括 #包括 int main(int ac,char*args[] { 整数合计; 如果(strcmp(*++args,“+”==0) { } printf(“Total=”,value1); 如果(strcmp(*args,“x”)==0) prin

我觉得这个问题更多的是我对指针的理解,但这里是。我想用C语言创建一个系统程序,它执行诸如数学运算符value1 value2之类的计算。示例数学+1 2。这将在屏幕上生成3。我在比较或求和这些数字时遇到困难。以下是我到目前为止的情况:

#包括
#包括
#包括
int main(int ac,char*args[]
{
整数合计;
如果(strcmp(*++args,“+”==0)
{
}
printf(“Total=”,value1);
如果(strcmp(*args,“x”)==0)
printf(“乘法”);
如果(strcmp(*args,“%”)=0)
printf(“模数”);
如果(strcmp(*args,“/”)==0)
printf(“分割”);
返回0;
}
我可以做一个字符串比较来得到操作符,但是我很难将这两个值相加。我试过:

int value1=atoi(*++args);
任何帮助都将不胜感激

*++args
由于您执行的是预增量
++
运算符的优先级高于
*
,因此指针将递增,稍后您将取消对它的引用,在这种情况下,您可能永远无法访问实际要访问的参数

如果你有类似的输入

+12

我们有

args[1] = +

args[2] = 1

args[3] = 2;
为什么不能直接访问atoi(args[2])

你可以这样做

int main(int argc, char **args)
{
    if(argc != 4)
    {
        printf("Fewer number of arguements\n");
        return 0;
    }

    else if((strcmp(args[1],"+")) == 0)
    {
      printf("Sum = %d\n",atoi(args[2]) + atoi(args[3]));
    }

    return 0;
}

不必通过指针访问命令行参数,您可以使用数组引用轻松地完成此操作。例如,
“math+12”
,args[0]是
math
,args[1]将是
+

int main( int ac, char* args[] )
{
    if(ac < 4)
    {
        printf("Invalid Argument");
        return 0;
    }
    if (strcmp(args[1],"+") == 0)
    {
        int x = atoi(args[2]);
        int y = atoi(args[3]);
        printf("%d + %d = %d\n", x,y, x + y);
    }
    if (strcmp(args[1],"x") == 0)
    {
        int x = atoi(args[2]);
        int y = atoi(args[3]);
        printf("%d * %d = %d\n", x,y, x * y);
    }
    if (strcmp(args[1],"%") == 0)
    {
        int x = atoi(args[2]);
        int y = atoi(args[3]);
        if(y == 0)
            return 0;

        printf("%d %% %d = %d\n", x,y, x % y);
    }
    if (strcmp(args[1],"/") == 0)
    {
        int x = atoi(args[2]);
        int y = atoi(args[3]);

        if(y == 0)
            return 0;
        printf("%d / %d = %d\n", x,y, x / y);
    }
    return 0;
}
intmain(intac,char*args[]
{
if(ac<4)
{
printf(“无效参数”);
返回0;
}
if(strcmp(args[1],“+”==0)
{
intx=atoi(args[2]);
int y=atoi(args[3]);
printf(“%d+%d=%d\n”,x,y,x+y);
}
if(strcmp(args[1],“x”)==0)
{
intx=atoi(args[2]);
int y=atoi(args[3]);
printf(“%d*%d=%d\n”,x,y,x*y);
}
if(strcmp(args[1],“%”==0)
{
intx=atoi(args[2]);
int y=atoi(args[3]);
如果(y==0)
返回0;
printf(“%d%%%d=%d\n”,x,y,x%y);
}
if(strcmp(args[1],“/”==0)
{
intx=atoi(args[2]);
int y=atoi(args[3]);
如果(y==0)
返回0;
printf(“%d/%d=%d\n”,x,y,x/y);
}
返回0;
}

我投票赞成将这个问题移到这样的位置(因为它更多的是关于编程而不是*nix。但是,我可以告诉你,这段代码可能需要一些认真的关爱(请对所有条件语句使用大括号(阅读:gotofail),它看起来像一个
开关
语句可能会有所帮助,缩进是你的朋友)。祝你好运!除非我错了,否则在if语句只有一行时省略大括号没有害处。正如你所看到的,我确实在第一个if中使用了大括号,因为我在测试时使用了多行。此外,由于粘贴了大括号,并且必须使用四个空格作为代码显示,因此缩进丢失。这里,让我为你修复缩进。B但对于任何block语句,你都应该始终使用大括号。从技术上讲,在C语言中,如果它是一行,你不必使用大括号,但如果你认为它从来没有造成伤害,你可以阅读苹果的Gotofail。如果我是你,我会a)永远不增加
args
,b)如果我绝对必须增加
args
,在文本成功后递增它:
if(strcmp(*args),…){args++;…}
。是什么启发了
args++
,而不是使用索引变量?@PM2Ring这就是为什么继续这样做是一个坏教授的标志。我还不能建议在这个网站上进行编辑,但不一致的缩进让我如此恼火!请修一下好吗工作做得很好,你的解释帮助我理解我做错了什么。@Gopi:这被拒绝了。起初我认为我犯了一个错误,但现在我想也许不是。目前尚不清楚索引是指增量之前还是之后的
args
。而且,我不知道“为什么不能直接访问…”是什么意思。你的回答需要澄清一下。谢谢你的解释,效果很好。