当前课程知识点:程序设计基础 >  第九章 可配置的程序设计 >  9.3 指定界面语言 >  9.3.1 提出问题与命令行参数

返回《程序设计基础》慕课在线视频课程列表

9.3.1 提出问题与命令行参数在线视频

9.3.1 提出问题与命令行参数

下一节:9.3.2 实现程序功能

返回《程序设计基础》慕课在线视频列表

9.3.1 提出问题与命令行参数课程教案、知识点、字幕

有了水果的配置文件之后

老板很高兴 程序用起来不错

生意也很好 过了一段时间

老板在留学生楼旁边开了一家分店

因为生意太好了 开了分店以后

老板又找王小二同学了

说这个地方留学生比较多

所以你能不能再帮我写一个是

英文界面的自动售卖程序

王小二想了一下 原来是中文的

现在英文的 这个语言因素会影响两个地方

第一个就是源代码里面我们显示菜单

显示一些提示语 原来是中文的

现在要改成英文的 第二个配置文件中间

原来老板配置的是中文的苹果香蕉

现在显然也得改成英文的

当然这个配置文件改英文 是老板你自己的事

你自己去改 你老板如果英文水平不好

就请教小二呗 所以配置文件涉及的中文和英文

老板可以自己去处理 跟源代码没有关系

但是用户交互界面里面的一些信息 一些提示语

这个就需要把原来的这些固定写死的中文内容都换成英文

因此王小二就发现说对于不同语言的界面

这个程序有不同的语言的这种界面

就需要维护不同的源代码 本来就一个程序需要维护

现在就需要可能两个版本 一个中文版一个英文版

那么能不能只写一个程序呢

我们只写一个程序 可这个程序表现出来

既可以显示中文版也可以显示成英文版

能不能这么做呢 王小二又想到了文件了

如果我们把不同语言的这些信息

用不同的配置文件来存放 感觉上是可以做到的

但是这种语言界面 这种语言信息的配置文件

和水果这个配置文件 不一样

水果名称和价格实际上是一种数据的文件

在程序的正常使用过程中间

我们根据情况 这个数据是不断变的

而这个语言界面的文件 如果我也写在文件里面

那么它一旦写好以后就不变了

你或者是用中文 或者是用英文

不管你切换哪种语言 每种语言来讲

内容是不会再改变了 那从另一个角度来讲

也可以这么去理解

就是这个水果名称和价格的配置文件

是需要水果店老板自己去改的

你使用的人你自己去改吧

但是语言配置的这个文件 那是开发这个程序的人写好的

它不是要用户要老板自己去改的 也不该由他改

他不能改 他很容易改错

那么怎么才能让老板方便的去决定

我应该这次程序运行应该用中文界面还是英文界面

王小二想到了 因为王小二在学我们这个课程的时候

还根据我们的推荐看了很多参考的教材

然后他看到过有一个语言上的东西叫命令行参数

我们可以通过不同的命令行参数

来控制程序有不同的表现 在我们的代码里面

要处理命令行参数的话 大家请看我们是这么写的

这个命令行参数是要体现在我们的main函数上的

以前我的main函数 int main 一对括号

现在我们因为需要处理命令行参数

命令行参数实际上是我们可以在命令行窗口给输进去的

那么这个参数有两个 第一个叫argc

读成argc 就参数的count 数量

第二个是argv 是参数的这些变量

因为我可能有很多参数

每个参数显然是吧啦吧啦的一些内容

所以实际上我是一个二维数组

或者你也可以认为说是一个字符串的数组

所以我们写成 char *argv[]来表示这个数组

当然也有同学会看到说 有的时候有另一种写法

因为它是一个二维的字符数组

所以也可以写成char **argv

这两种写法是等价的

当然第一种写法可能更明确的表示说

这个argv是一个字符串的数组

那么对于具体的怎么来去实现呢

那王小二也看到了一些示例的代码

比如说我们这么一个示例代码

它是通过命令行参数给出两个整数

这个程序可以把这两个整数的和给输出在屏幕上面

来看 这个代码写得其实挺简单的

定义两个整数a和b a是等于大家看到atoi(argv[1])

b=atoi(argv[2]) 这个下标是2

然后就可以cout了 为什么这么写的呢

那其实我们可以去自己尝试一下

实际上是对应的这个东西 如果我在命令行代码里面写上

比如说我这个程序名称编译完叫add.exe

那么就写上add.exe 调用这个程序

然后给他两个参数 当然就是命令行参数4和5

然后我回车 这个时候我们的main函数

的argc argv参数就有值了

大家看到我在命令行上实际上打了三项

第一项是add.exe 第二项是4 第三项是5

所以我们的main函数参数的argc就等于3

因为你确实输入了空格所隔开的三项

第一项显然是add.exe 第二项是4 第三项是5

当然由于我们的数组是从0开始下标的

所以我们a对应的是argv[1] b对应的argv[2]

这就是我们命令行参数 传递到main函数中间的一个情形

那么在我们的dev C++的环境里面

怎么去输入命令行参数呢

我就没有命令行的窗口了呀

那大家可以去找一下

在我们运行的菜单下面有一个叫参数

点这个参数会蹦出来一个框

这个里面就可以输入我们的实际上

要填进去的命令行参数了 比如说我刚才的4 5

那我就写4空格5就可以了 那么这是我们自己写代码

别人已经写好的一个代码 编译完成一个程序

那我怎么知道 这样一个程序能接受什么样的命令行参数呢

当然有的时候我说我们会有一些用户手册

下面会写着 那往往查找手册是比较麻烦的

所以我们一般写法是说 我们会在程序中间去检测

命令行参数是不是合法

如果不合法我就输出一个帮助信息

要告诉用户说 到底我这个程序能接受什么样的命令行参数

那比如说对于我们刚才的那个加法的程序

比如说我可以这么写

首先先判断说 你是不是输入了两个数

所以如果argc不等于3的话 那你肯定不对

那如果不对 我就要提示用户

你看看我是这么写的

我这个程序的用途是这样的

我输出了这个argv[0] 你具体的这个编译完的程序

然后加第一个操作数 第二个操作数

然后还解释了一下 第一和第二个操作数是整数

那么一般我们都会通过这样一个方式来让真正的用户去了解

我这个程序是接收哪些命令行参数

包括这些命令行参数分别是什么样的格式

程序设计基础课程列表:

第一章 编程初步

-1.1 基础知识

--1.1.1 什么是程序?什么是语言?

--1.1.2 什么是程序设计?

--1.1.3 计算机发展史

-1.2 买菜问题

--1.2.1 问题描述

--1.2.2 程序的基本结构

-1.3 数学运算

--1.3.1 数学运算符

--1.3.2 数学函数

-1.4 补充说明

--1.4.1 编程环境的下载与安装

--1.4.2 程序基本结构中的含义

--1.4.3 格式与风格

-1.5 总结

--1.5 总结

-程设论道

--程设论道

-师生问答

--师生问答一:怎样学好程序设计

--师生问答二:语言选择

--师生问答三:关于函数

-第一章 编程初步--语法自测

第二章 变量与代数思维

-2.1 关于超级计算器的几点思考

--2.1.1 关于超级计算器的几点思考

-2.2 电子秤模拟 — 背景介绍及需求分析

--2.2.1 电子秤模拟 — 背景介绍及需求分析

-2.3 电子秤模拟 — 代码实现

--2.3.1 电子秤模拟 — 代码实现

-2.4 变量定义与变量类型

--2.4.1 变量定义与变量类型

-2.5 猜数游戏与数据表示

--2.5.1 猜数游戏与数据表示

-2.6 关于变量的讨论

--2.6.1 变量的初始值

--2.6.2 变量类型

--2.6.3 变量内存单元地址

--2.6.4 存“变量地址”的变量——指针

--2.6.5 指针的 读/写 操作

--2.6.6 指针的 加/减 操作

--公告

-2.7 变量体现的计算思维

--2.7.1 变量体现的计算思维

-程设论道

--程设论道

-师生问答

--师生问答

-第二章 变量与代数思维--语法自测

第三章 逻辑推理与枚举解题

-3.1 谁做的好事——语义表示

--3.1.1 谁做的好事——语义表示

-3.2 谁做的好事——真假检查

--3.2.1 谁做的好事——真假检查

-3.3 谁做的好事——循环枚举

--3.3.1 谁做的好事——循环枚举

-3.4 谁是嫌疑犯——多重循环枚举

--3.4.1 谁是嫌疑犯——多重循环枚举

-3.5 谁是嫌疑犯——破案线索表示

--3.5.1 谁是嫌疑犯——破案线索表示

-3.6 谁是嫌疑犯——用二进制枚举

--3.6.1 谁是嫌疑犯——用二进制枚举

-程设论道

--程设论道一

--程设论道二

--程设论道三

-师生问答

--师生问答一:字符与ASCII码表

--师生问答二:其他循环语句、运算符优先级与变量作用域

-第三章 逻辑推理与枚举解题--语法自测

第四章 筛法与查找

-4.1 插花游戏

--4.1.1 问题提出(求素数)

--4.1.2 函数初探

--4.1.3 运行演示

-4.2 筛法

--4.2.1 筛法思路

--4.2.2 数组的定义

--4.2.3 代码翻译

--4.2.4 运行演示

--4.2.5 小朋友数人数

--4.2.6 运行演示

--4.2.7 韩信点兵

-4.3 线性查找

--4.3.1 扑克查找问题

--4.3.2 扑克查找问题代码翻译

--4.3.3 最小值问题

--4.3.4 最小值问题代码翻译

-4.4 折半查找

--4.4.1 提问

--4.4.2 折半查找思路

--4.4.3 折半查找代码翻译

--4.4.4 折半查找运行演示

-4.5 排序问题

--4.5.1 插入排序

--4.5.2 选择排序

--4.5.3 函数写法

--4.5.4 运行演示

-4.6 总结

--4.6.1 总结

-程设论道

--程设论道一:数组与编码思维

--程设论道二:筛法

-师生问答

--师生问答一:函数与面向过程编程

--师生问答二:数组的下标越界

-第四章 筛法与查找--语法自测

第五章 分治思想与递归

-5.1 阶乘

--5.1.1 阶乘问题

--5.1.2 递归解法

--5.1.3 递归小结

-5.2 排序

--5.2.1 归并排序——总体思路

--5.2.2 归并排序——思路分解

--5.2.3 归并排序——代码解说

--5.2.4 快速排序——总体思路

--5.2.5 快速排序——代码解说

--5.2.6 排序总结

-5.3 矩阵填充

--5.3.1 矩阵填充问题

--5.3.2 代码解说

-5.4 分书与八皇后

--5.4.1 问题描述

--5.4.2 问题分析——共性

--5.4.3 问题分析——区别

--5.4.4 解题准备——二维数组

--5.4.5 解题准备——递归设计

--5.4.6 代码解说——分书问题

--5.4.7 代码解说——八皇后问题

-5.5 青蛙过河

--5.5.1 问题描述

--5.5.2 问题分析——简单情况

--5.5.3 问题分析——复杂情况

--5.5.4 问题分析——一般情况

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答一

--师生问答二

-第五章 分治思想与递归--语法自测

第六章 递推与动态规划

-6.1 兔子数列问题

--6.1.1 问题描述

--6.1.2 按大小兔子分别递推

--6.1.3 按总数递推

--6.1.4 不用数组递推

-6.2 分鱼问题

--6.2.1 问题描述

--6.2.2 从A到E递推

--6.2.3 从E到A递推

-6.3 橱窗的插花问题

--6.3.1 问题描述

--6.3.2 题意理解与分析

--6.3.3 用枚举思想解题

--6.3.4 采用递推的优化算法

--6.3.5.1 采用动态规划算法—优化分析

--6.3.5.2 采用动态规划算法—递推代码

--6.3.5.3 采用动态规划算法—计算过程

--6.3.5.4 采用动态规划算法—输出方案

--6.3.6 动态规划总结

-6.4 最长公共子序列问题

--6.4.1 问题描述与理解

--6.4.2 问题分析

--6.4.3.1 动态规划解题(1)

--6.4.3.2 动态规划解题(2)

--6.4.3.3 动态规划代码

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第六章 递推与动态规划--语法自测

第七章 文本数据处理

-7.1 统计记录总数

--7.1.1 问题分析

--7.1.2 读文件操作

-7.2 统计活跃用户数

--7.2.1 问题分析

--7.2.2 字符串

--7.2.3 程序翻译与演示

-7.3 统计在线时长

--7.3.1 问题分析

--7.3.2 结构

--7.3.3 程序翻译与演示

--7.3.4 写文件操作

-7.4 总结

--7.4.1 总结

-程设论道

--程设论道

-师生问答

--师生问答

-第七章 文本数据处理--语法自测

第八章 非文本数据处理

-8.1 将数据组织成链表

--8.1.1 链表的基本概念

--8.1.2 代码讲解

--8.1.3 链表遍历与释放

-8.2 提高链表访问效率 —— 哈希链表

--8.2.1 简单的哈希算法

--8.2.2 算法实现

-8.3 以二进制文件存储链表

--8.3.1 二进制文件的操作方法

--8.3.2 代码讲解

-程设论道

--程设论道一

--程设论道二

-师生问答

--师生问答

-第八章 非文本数据处理--语法自测

第九章 可配置的程序设计

-9.1 自动售卖程序

--9.1.1 提出问题与初步设计

--9.1.2 细化实现订单处理

--9.1.3 使程序更健壮

-9.2 配制水果信息

--9.2.1 提出问题与设计文件格式

--9.2.2 实现订单处理功能

-9.3 指定界面语言

--9.3.1 提出问题与命令行参数

--9.3.2 实现程序功能

-程设论道

--程设论道

-师生问答

--师生问答

-第九章 可配置的程序设计--语法自测

9.3.1 提出问题与命令行参数笔记与讨论

也许你还感兴趣的课程:

© 柠檬大学-慕课导航 课程版权归原始院校所有,
本网站仅通过互联网进行慕课课程索引,不提供在线课程学习和视频,请同学们点击报名到课程提供网站进行学习。