带参数的main函数

我们刚开始写代码(C语言)的时候用的都是无参数的main函数,如:

#include <stdio.h>

int main()
{
    printf("Hello world!\n");
    return 0;
}

 

但是后来碰到了带参数的main函数(此函数是cmu的代码)

#include <stdio.h>
#include <stdlib.h>
#include <string.h>

#define BUFSIZE 256
int main(int argc, char *argv[]) {
    char prefix[BUFSIZE];
    char next[BUFSIZE];
    int i;
    float sum = 0.0;
    for (i = 1; i < argc; i++) 
    {
	float x = atof(argv[i]);   // atof()会扫描参数nptr字符串,跳过前面的空格字符,直到遇上数字或正负符号才开始做转换                       
        sum += x;             	//注意循环时sum刷新为0.0了
        if (i == 1) 
        {
	  sprintf(prefix, "%.4g", x);	//把格式化的数据写入某个字符串中,以在f格式或e格式中占位宽度较小的类型输出小数,并且小数位数为4位 ,4位精度浮点数输出
        //第一次循环时,将第一个字符串写进去prefix
        } 
        else {
	  sprintf(next, " + %.4g", x);         //第二三次循环,同样先写进去next将第分别相加第一二个字符串和全部字符串并打印       
	  strcat(prefix, next);//连接两个字符串
	  printf("%s = %.4g\n", prefix, sum);
	}
    }
    return 0;
}

里面的参数为int argc, char *argv[],其中参数argc表示!!命令行!!中命令与参数的个数。argv[]表示!!输入参数的内容!!,默认argc为1,argv[0]为程序名称。如果输入一个参数,则argc为2,argv[0]为程序名称,argv[1]为输入的那个参数。

输入时用空格将各个参数分开。

有时也会遇到main函数中参数为int argc,char **argv,其中,char **argv表示一个指向字符指针的指针,可以想成指向字符串的指针。

 

 

最后再讲讲这个代码想告诉我们什么吧,当我们按不同顺序(2和3)输入1e20    -1e20   3.14这三个参数时,会发现打印出的答案不一样

1.  luoxinxin@luoxinxin-virtual-machine:~/桌面/c$ ./a.out  -1e20  3.14
-1e+20 + 3.14 = -1e+20

2.  luoxinxin@luoxinxin-virtual-machine:~/桌面/c$ ./a.out  1e20  -1e20  3.14
1e+20 + -1e+20 = 0
1e+20 + -1e+20 + 3.14 = 3.14

3. luoxinxin@luoxinxin-virtual-machine:~/桌面/c$ ./a.out  -1e20  3.14   1e20
-1e+20 + 3.14 = -1e+20
-1e+20 + 3.14 + 1e+20 = 0

这告诉我们当进行浮点数计算时会发生舍入(如1),所以计算时的顺序尤为重要,同时有时候出问题就是出在这里,要特别注意。
 

 

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值