问题描述

使用main函数的参数,实现一个整数计算器,程序可以接受三个参数,第一个参数“-a”选项执行加法,“-s”选项执行减法,“-m”选项执行乘法,“-d”选项执行除法,后面两个参数为操作数。
例如:输入test.exe
 -a 1 2
      执行1+2输出3

问题分析

上面的逻辑思维很简单,但是问题在于如何在VS中向main函数传递参数,即如何使用命令行参数,以及具体怎么传参

解决方法

这里我直接给代码,结合代码进行解释说明

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>int main(int argc, char *argv[])
{int sum = 0;int num1 = atoi(argv[2]);int num2 = atoi(argv[3]);if (strcmp(argv[1], "-a") == 0){sum = num1 + num2;}else if (strcmp(argv[1], "-s") == 0){sum = num1 - num2;}else if (strcmp(argv[1], "-m") == 0){sum = num1 * num2;}else if (strcmp(argv[1], "-d") == 0){sum = num1 / num2;}printf("%d\n", sum);system("pause");return 0;
}

main函数也是可以传递参数的,这里使用了可变参数列表的知识,关于这方面的知识,大家可以自行了解,下面需要给大家看看如何在VS中给main函数传参数。

右键单击要 添加参数的工程-->属性-->配置属性-->调试,在右侧“命令参数”栏输入要添加的参数,各参数间用空格分离,比如我上面传参数时,可以传递-a 2 4。如图

我们看main函数的函数声明部分

int main(int argc, char *argv[])

上面的传入两个参数,其中int argc的值会根据咱们传递的参数自动赋值,这里我们不需要管他,我们需要需要传递的参数只有下面的字符串。而*argv[]就是刚刚传入的字符串,上面我传入了-a 2 4,那么argv[1]的值为"-a",注意这里数组下标从1开始,argv[2]的值是2,argv[3]的值是4,这样就不难分析我上面的代码了。这里补充说明一下,main函数传入的是字符串,但是我们要对整型进行相加减,上面使用了一个这个的作用是把字符串转化成数字。

int main(int argc, char *argv[])

问题拓展

1.这里我们会出现一些传参失误,或者我多传入几个参数会是怎样的结果呢,比如我传入的参数是-a 2 4 -s 2 5,那么结果会怎么样,还是我上面的程序,这里只是把argv[1]到argv[6]分别赋值了上面的参数,但是我并没有使用argv[4]和他以后的内容,所以程序跑起来没有太大的问题。

2.这里又有一个疑问,我们意识里面的数组不是下标从0开始吗,为什么上面直接从1开始了呢,对于这个疑问,解决的方法也很简单,我们既然知道参数是字符串,那么我们把argv[0],和argv[1]打印出来不就好了吗,这里我传入的参数是-a 2 4,请看代码

#define _CRT_SECURE_NO_WARNINGS 1
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include<windows.h>int main(int argc, char *argv[])
{printf("%s\n",argv[0]);printf("%s\n", argv[1]);system("pause");return 0;
}

请看输出的结果

根据图中的结果我们不难发现,argv[0]存放的是程序所在的路径字符串,argv[1]放的是第一个参数,而其他的参数我没有打印出来。这里我们还明白了一个问题,就是main函数中的另一个参数int argc的值,系统会自动识别,值是参数个数加1,这个1对应的就是路径参数。

main函数参数,在VS中向命令行添加参数的方法相关推荐

  1. linux中read函数的用法,Linux中read命令的简介及使用方法

    Linux中read命令的简介及使用方法 发布时间:2020-08-17 16:40:04 来源:亿速云 阅读:107 作者:小新 这篇文章给大家分享的是有关Linux中read命令的简介及使用方法的 ...

  2. java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  3. java 接收命令行参数_java中的命令行参数_Java中的命令行参数

    java中的命令行参数 Command-line arguments in Java are used to pass arguments to the main program. If you lo ...

  4. [转载] c语言中检查命令行参数_C中的命令行参数

    参考链接: Java中的命令行参数 c语言中检查命令行参数 Command line argument is a parameter supplied to the program when it i ...

  5. main函数的参数详解,它们是何时何处传入的?(main函数的参数值是从操作系统命令行上获得的)

    一般的main函数都是不带参数的,因此main 后的括号都是空括号.实际上,main函数可以带参数,这个参数可以认为是 main函数的形式参数.C语言规定main函数的参数只能有两个, 习惯上这两个参 ...

  6. Java方法01 方法(函数)定义、调用、值传递、重载、命令行传递参数

    Java 方法的定义.调用.值传递.重载.命令行传递参数 1. 什么是方法? 2. 方法的定义和调用 3. 值传递和引用传递 4. 方法的重载 5. 命令行传递参数 6. 可变参数(输入参数的数量不确 ...

  7. main在c语言中的作用,main函数在C语言中是怎么定义的?有什么作用?

    main函数在C语言中是怎么定义的?有什么作用? 更新时间:2019-10-24 13:55 最满意答案 额,main不是程序的最开始啦.拿用glibc的程序来说,C语言执行的过程应该是 _start ...

  8. 浅谈linux的命令行解析参数之getopt_long函数

    前言 在linux中,经常需要各种命令,通常情况下都会带各种参数,而这些参数是如何解析的呢?通常使用GNU C提供的函数getopt.getopt_long.getopt_long_only函数来解析 ...

  9. java的main函数返回值_Java中的main方法

    首先需要说明的是: 1.main函数(主函数)是可以调用的,这种调用是没有意义的: 2. main函数只能出现在公共类中也就是public class中: 但我不明白的是:在eclipse中默认的in ...

最新文章

  1. 懒汉式单例和饿汉式单例优缺点
  2. Ubuntu 14.04 台式机锐捷使用:
  3. java 锁的底层原理
  4. 前端---JavaScript基础1
  5. Python List:合并多个list,listd的合并
  6. vc c mysql_VC++ 利用 MySQL connector c 访问MySQL 数据库
  7. MATLAB获取字符串中两个特定字符之间的内容
  8. 51单片机c语言烧录软件,51单片机烧写程序的方法
  9. 小白教程 微信小程序 官方示例Demo下载及运行
  10. Linux ——vi / vim 新建文件vi abc.txt 、编辑文件 i、退出编辑 esc、保存文件:wq、打开文件所在目录 open . 、使用命令打开文件 open ./abc.txt。
  11. 【web前端HTML5+CSS3】01HTML--基础知识
  12. dw相对路径怎么改_Dreamweaver绝对路径和相对路径
  13. LTE 中的ANR以及TNL介绍
  14. shell脚本之俄罗斯方块
  15. 【已解决】Failed to discover available identity versions when contacting http://controller:5000/v3.
  16. ERDAS 2015 64位破解安装教程
  17. MSP432学习笔记:ADC14
  18. CSP 201712 - 4 【行车路线】
  19. Log4J使用说明书
  20. Codeforces Round #645 (Div. 2) D - The Best Vacation 题解(二分+思维)

热门文章

  1. block_dump观察Linux IO写入的具体文件(mysqld)
  2. 用jQuery实现文件的上传,后台为spring+mybatis
  3. [纪录]仿IOS滚轮效果(竖直滑动选择器)
  4. html实时显示log,websocketd 实现浏览器查看服务器实时日志
  5. Linux安装软件的注意事项,64位Linux下安装软件注意事项
  6. 小型职工工作量c语言,计算机c语言职工工作量统计系统.doc
  7. linux内核设备管理典型算法,linux内核物理存储空间管理有哪些常用算法
  8. java工程化_(二)Java工程化--Maven实践(示例代码)
  9. oracle 统计信息字典表,Oracle数据字典表查询
  10. 安卓网页广告拦截_拦截烦人的网页广告,增加上网体验