您当前的位置:首页 > 计算机 > 编程开发 > VC/VC++

再谈main()函数,接收控制台数据

时间:12-26来源:作者:点击数:
main() 是C语言程序的入口函数,有且只能有一个,它实际上有两种标准的原型:
int main();
int main(int argc, char *argv[]);

前面的教程中我们一直使用第一种原型,它简单易懂,能让初学者很快入手。第二种原型在实际开发中也经常使用,它能够让我们在程序启动时给程序传递数据。

一个程序在启动时允许系统或用户给它传递数据,Windows 和 Linux 都支持,这些数据以字符串的形式存在,多份数据之间以空格分隔。也就是说,用户输入的多份数据在程序中表现为多个字符串。

给程序传递数据的一种方法就是从控制台运行程序,在 Windows 下就是从 cmd(命令提示符程序)运行,在 Linux 下就是从终端(Terminal)运行,本节以 Windows 为例讲解。

在第二个原型中,argc 表示传递的字符串的数目,argv 是一个指针数组,每个指针指向一个字符串(一份数据)。我们来看一个具体的例子:

#include <stdio.h>
int main(int argc, char *argv[]){
    int i;
    printf("The program receives %d parameters:\n", argc);
    for(i=0; i<argc; i++){
        printf("%s\n", argv[i]);
    }
    return 0;
}

将生成后的程序放在D:\目录下,命名为demo.exe,打开 cmd(命令提示符程序),输入D:\demo.exe 城东书院 www.cdsy.xyz C-Lang,程序的运行结果如下:

从运行结果可以看出,包括程序名以及它后面的字符串都会被程序所接收。去掉后面的数据,只输入程序名:

再次证明了程序名也会被传递给程序本身。cd 到程序所在目录,只输入程序名(不包含路径)就可以运行程序:

可以看到,程序名不包含路径。

main() 函数的第二种原型有非常实际的应用,在 Linux 中,每个 Shell 命令都需要一个程序来解释,如果这个程序是由C语言编写的,那么 main() 函数就可以接收这个命令以及它后面附带的参数。

【实用程序】判断用户输入的是否是素数。

#include <stdio.h>
#include <math.h>
#include <stdlib.h>
int isPrime(int n);
int main(int argc, char *argv[]){
    int i, n, result;
    if(argc <= 1){
        printf("Error: no input integer!\n");
        exit(EXIT_SUCCESS);
    }
    for(i=1; i<argc; i++){
        n = atoi(argv[i]);
        result = isPrime(n);
        if(result < 0){
            printf("%3d is error.\n", n);
        }else if(result){
            printf("%3d is prime number.\n", n);
        }else{
            printf("%3d is not prime number.\n", n);
        }
    }
    return 0;
}
//判断是否是素数
int isPrime(int n){
    int i, j;
    if(n <= 1){  //参数错误
        return -1;
    }else if(n == 2){  //2是特例,单独处理
        return 1;
    }else if(n % 2 == 0){  //偶数不是素数
        return 0;
    }else{  //判断一个奇数是否是素数
        j = (int)sqrt(n);
        for(i=3; i<=j; i+=2){
            if (n % i == 0){
                return 0;
            }
        }
        return 1;
    }
}

在 cmd 中的运行效果截图:

方便获取更多学习、工作、生活信息请关注本站微信公众号城东书院 微信服务号城东书院 微信订阅号
推荐内容
相关内容
栏目更新
栏目热门