这个问题我觉得更多是我对指针的理解,但是这里有。我想在C中创建一个系统程序,它以数学运算符value1 value2的形式执行计算。示例math + 1 2.这将在屏幕上产生3。我在比较或总结这些数字时遇到了麻烦。以下是我到目前为止的情况:
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
int main( int ac, char* args[] )
{
int total;
if (strcmp(*++args,"+") == 0)
{
}
printf("Total= ", value1);
if (strcmp(*args,"x") == 0)
printf("multiply");
if (strcmp(*args,"%") == 0)
printf("modulus");
if (strcmp(*args,"/") == 0)
printf("divide");
return 0;
}
我可以进行字符串比较以获取运算符但是很难添加这两个值。我试过了:
int value1=atoi(*++args);
任何帮助都将不胜感激。
答案 0 :(得分:1)
*++args
由于您正在进行预增量++
运算符的优先级高于*
所以指针会递增,之后您将取消引用它,在哪种情况下您可能永远无法访问您实际的争论打算。
如果你有像
这样的输入 + 1 2
我们有
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;
}
答案 1 :(得分:1)
您可以使用数组引用轻松地通过指针访问命令行args。例如,"math + 1 2"
,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;
}