命令行传参

1 主函数默认参数

我们常见到的主函数形式往往是这样的:

1
2
int main(void)
{……}

这种主函数是不用传参的。

但是C语言规定了主函数有两种默认参数,其形式是这样的:

1
int main(int argc, char *argv[])

或者是这样的:

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

以上两种方式等价。

其中argc必须是整型数据,argv必须是字符型的指针数组。

argc———向主函数传递的参数个数(程序员无需传入argc,由程序自动统计)

argv——–指针数组,指向字符型,由于第一个参数必须是exe执行文件,所以后面才是要传入的字符。各个参数之间用空格隔开。

下面用一个简单的例子演示一下:

1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdio.h>

int main(int argc, char *argv[])
{
while(argc>1)
{
++argv; //指针移动
printf("%s\n",*argv); //输出字符串
--argc; //参数个数减少
}

return 0;
}

编译成功以后,要对主函数进行传参。

在Dev编译环境下传参方法:

点击上方菜单栏运行(R)–> 参数(W),然后出现这个窗口:

向其中传入三个参数TEXT1 TEXT2 TEXT3,并点击确定。参数传入完毕。

运行程序即可,运行结果如下图:

在VC++6.0编译环境下传参方法:

点击上方菜单栏Project—>Settings—->Debug,在Program arguments中添加字符参数TEXT1 TEXT2 TEXT3,点击OK后,参数传递完毕。

接下来运行程序,结果如上图。

使用命令行进行传参

快捷键Windows+R,输入cmd回车以后,

将之前编译后生成的.exe文件直接拖动到黑框框的输入位置,没错,就是直接拖动!!!当然也可以按照指定路径一个一个进入,但是拖动无疑是最简便的办法。

拖动成功以后,是这样的:

Then我们要传入字符串参数。因为temp1.exe本身就是main函数的第一个参数,所以我们是从argv[1]开始传入的,传入后并运行结果如下:

2 命令行实现四则运算

要求:

制作一简单的计算器,注意事项:   

1)需要计算的内容从命令行输入,格式为:执行文件 数1 op 数2,当命令行格式不正确(参数个数不为4)时,应报错。   

(2)op的取值范围为+、-、*、/、%,超出此范围则应报错。   

(3)数1和数2均为整数(int),op为+、-、时不考虑运算结果超出int型能表示的范围, op为/、%时不考虑除数为0的情况,但op为/时计算结果应保留2位小数。   

(4)程序的返回值(即由main函数return的值和程序使用exit终止运行时返回的值,也称退出代码)规定为:     

​ ①正常运行结束时,返回0  

​ ②命令行格式不对返回1   

​ ③op超出范围时返回2

Way One:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
#include <string.h>
#include <stdlib.h>

int myatoi(char *s) //将字符型转化为数字型
{
int t = 0;
int flag=1;

while(*s)
{
if(*s=='-') //考虑负值的情况
{
s++;
flag=-1;
}
t=t*10+*s-'0';
s++;
}

return t*flag;
}

int main(int argc,char** argv)
{
char op;
int a, b;
double result;


if(argc != 4)
{
printf("error!\n");
return 1;
}



a = myatoi(argv[1]); //可以使用C语言库自带的atoi函数
b = myatoi(argv[3]);
op = *argv[2];



if(op=='+')
{
result=(double)(a+b);
printf("%d + %d = %.2lf\n",a,b,result);
return 0;
}
else if(op=='-')
{
result=(double)(a-b);
printf("%d - %d = %.2lf\n",a,b,result);
return 0;
}

else if(op=='*')
{
result=(double)(a*b);
printf("%d * %d = %.2lf\n",a,b,result);
return 0;
}
else if(op=='/')
{
result=(double)a/(double)b;
printf("%d / %d = %.2lf\n",a,b,result);
return 0;
}
else
{
printf("error!\n");
return 2;
}


}

运行结果:

cpp