带参数的main函数

    xiaoxiao2023-11-23  161

    我们刚开始写代码(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.143. 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),所以计算时的顺序尤为重要,同时有时候出问题就是出在这里,要特别注意。  

     

    最新回复(0)