程序应该采用三个命令行参数,其中第一个是算术操作数,第二个和第三个数字应该应用操作数 该程序将打印随机值。
#include <stdio.h>
int main (int argc, int *argv[])
{
switch ( (char) * argv[1] )
{
case '+' : printf("%d", *argv[2] + *argv[3] );
}
return 0;
}
另外,我应该如何获得不同数据类型的命令行参数?使用类型转换是否正确?
答案 0 :(得分:1)
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
if ( argc > 3 )
{
switch ( *argv[1] )
{
case '+' :
printf("answer: %d\n", atoi(argv[2]) + atoi(argv[3]) );
break;
default :
printf("ERROR: operand %c invalid\n",*argv[1]);
}
}
else
{
printf("ERROR: you must enter operator, plus two operands. e.g.:\n");
printf("%s + 3 2\n",argv[0]);
return 1;
}
}
答案 1 :(得分:1)
#include<stdio.h>
#include<stdlib.h>
int main(int argc, char *argv[]) {
if(argc != 4) {
printf("Error message");
printf("USAGE: ./a.out <operand> <number1> <number2>");
return 0;
}
switch(*argv[1]) {
case '+':
printf("%d", (atoi(argv[2])+atoi(argv[3])));
break;
default:
printf("Enter valid operand");
}
}
答案 2 :(得分:0)
正如其他人所提到的,参数被读作argv
的字符串数组。因此,您必须使用char *argv[]
。从字符串到int的转换由atoi
执行。简单地将字符转换为整数将为您提供该字符的ASCII表示。
#include <stdio.h>
#include <stdlib.h>
int main (int argc, char *argv[])
{
switch ( *argv[1] )
{
case '+':
printf("%d\n", atoi(argv[2]) + atoi(argv[3]) );
break;
}
return 0;
}
要获得浮点运算,请将%d
替换为%f
,将atoi
替换为atof
。
当然,您还应该添加健全性检查。在最低限度,您应该检查argc
以防止从未初始化的空间读取。见评论。