107 再谈main()函数,接收控制台数据
来源:互联网 发布:胜任力测评软件 编辑:程序博客网 时间:2024/06/10 08:25
C学习网:链接->C学习网
C训练网:链接->C训练网
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
目录下,命名为main.exe
,打开 cmd(命令提示符程序),输入D:\demo\main.exe C语言中文网 c.biancheng.net 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;
- }
- }
阅读全文
0 0
- 107 再谈main()函数,接收控制台数据
- 控制台接收数据
- 短信接收Main函数
- 接收控制台输入的数据
- 源码:从控制台接收数据
- [C#]控制台程序静态main函数浅谈
- JAVA接收控制台数据Scanner类---输入
- [c++笔记]main()函数的参数接收
- vs中控制台应用程序 main函数中 初始化args
- C#控制台应用程序Main函数中的参数args
- windows下图形界面转为控制台的main函数入口
- IntelliJ IDEA 执行main函数时,控制台乱码
- Eclipse中main函数参数如何由控制台输入
- ZigBee_数据接收函数解析
- Java——Scanner:接收控制台数据的一些方法
- C#基础-004接收控制台传入的数据
- java控制台接收输入
- dotnet控制台应用程序的静态main函数中不能直接调用成员函数
- 106 只需一招,彻底攻克C语言指针
- 驱动学习8--gpiolib的使用
- python中使用plot画图,图不显示
- android中如何在代码中直接设置View的layout_weight属性
- Educational Codeforces Round 22 C. The Tag Game(思维 搜索)
- 107 再谈main()函数,接收控制台数据
- EC插件—修改指南(汇总)
- 【ARM】一步一步移植Linux Kernel 2.6.13到板子
- SpringMVC使用 @responseBody Annotation 在老版本IE会变成下载
- WIN32SDK : TranslateAccelerator参数1填错引起加速键失效
- 108 对C语言指针的总结
- qduoj LC and Prime&&hdu 5104(线性筛)
- HDU3306
- Emacs Error: Invalid function: org-babel-header-args-safe-fn