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

来源:互联网 发布:胜任力测评软件 编辑:程序博客网 时间:2024/06/10 08:25

C学习网:链接->C学习网

C训练网:链接->C训练网

main() 是C语言程序的入口函数,有且只能有一个,它实际上有两种标准的原型:

  1. int main();
  2. int main(int argc, char *argv[]);
前面的教程中我们一直使用第一种原型,它简单易懂,能让初学者很快入手。第二种原型在实际开发中也经常使用,它能够让我们在程序启动时给程序传递数据。

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

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

在第二个原型中,argc 表示传递的字符串的数目,argv 是一个指针数组,每个指针指向一个字符串(一份数据)。我们来看一个具体的例子:
  1. #include <stdio.h>
  2. int main(int argc, char *argv[]){
  3. int i;
  4. printf("The program receives %d parameters:\n", argc);
  5. for(i=0; i<argc; i++){
  6. printf("%s\n", argv[i]);
  7. }
  8. return 0;
  9. }
将生成后的程序放在D:\demo目录下,命名为main.exe,打开 cmd(命令提示符程序),输入D:\demo\main.exe C语言中文网 c.biancheng.net C-Lang,程序的运行结果如下:

从运行结果可以看出,包括程序名以及它后面的字符串都会被程序所接收。

去掉后面的数据,只输入程序名:

再次证明了程序名也会被传递给程序本身。

cd 到程序所在目录,只输入程序名(不包含路径)就可以运行程序:

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

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

【实用程序】判断用户输入的是否是素数。
  1. #include <stdio.h>
  2. #include <math.h>
  3. #include <stdlib.h>
  4. int isPrime(int n);
  5. int main(int argc, char *argv[]){
  6. int i, n, result;
  7. if(argc <= 1){
  8. printf("Error: no input integer!\n");
  9. exit(EXIT_SUCCESS);
  10. }
  11. for(i=1; i<argc; i++){
  12. n = atoi(argv[i]);
  13. result = isPrime(n);
  14. if(result < 0){
  15. printf("%3d is error.\n", n);
  16. }else if(result){
  17. printf("%3d is prime number.\n", n);
  18. }else{
  19. printf("%3d is not prime number.\n", n);
  20. }
  21. }
  22. return 0;
  23. }
  24. //判断是否是素数
  25. int isPrime(int n){
  26. int i, j;
  27. if(n <= 1){ //参数错误
  28. return -1;
  29. }else if(n == 2){ //2是特例,单独处理
  30. return 1;
  31. }else if(n % 2 == 0){ //偶数不是素数
  32. return 0;
  33. }else{ //判断一个奇数是否是素数
  34. j = (int)sqrt(n);
  35. for(i=3; i<=j; i+=2){
  36. if (n % i == 0){
  37. return 0;
  38. }
  39. }
  40. return 1;
  41. }
  42. }
在 cmd 中的运行效果截图:

原创粉丝点击