帮助基本编程
Help with basic programming
我觉得这个问题更多的是我对指针的理解,但这里是。我想在 C 中创建一个系统程序来执行这样的数学运算符 value1 value2 的计算。数学示例 + 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);
如有任何帮助,我们将不胜感激。
*++args
因为你正在做一个预递增 ++
运算符比 *
有更高的优先级所以指针被递增然后你取消引用它在这种情况下你可能永远无法访问论点 which你真的打算。
如果您有类似
的输入
+ 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;
}
无需通过指针访问命令行参数,您可以使用数组引用轻松完成此操作。例如,"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;
}
我觉得这个问题更多的是我对指针的理解,但这里是。我想在 C 中创建一个系统程序来执行这样的数学运算符 value1 value2 的计算。数学示例 + 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);
如有任何帮助,我们将不胜感激。
*++args
因为你正在做一个预递增 ++
运算符比 *
有更高的优先级所以指针被递增然后你取消引用它在这种情况下你可能永远无法访问论点 which你真的打算。
如果您有类似
的输入+ 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;
}
无需通过指针访问命令行参数,您可以使用数组引用轻松完成此操作。例如,"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;
}