今晚我不得不考虑的另一件“新”事情:
int main(argc, char *argv[])
我不明白为什么我想从 cmd 行读取,但你永远不知道!为什么我不直接使用getline
并将其读入字符串?或者getch
如果是别的什么?
我怀疑答案与要处理的代码量有关——使用这样的东西#include <string>
肯定会使用更少的计算能力,对吗?
编辑:回顾这一年,我觉得很傻,在大学里从来没有真正教过关于命令行输入的课程(我知道对,我在上什么样的课程..):)
argc
和argv
标准输入输出无关。如果我说
myapp Drink More Ovaltine
argc
将是 4,并且argv
将包含程序的名称,然后是“Drink”,然后是“More”,然后是“Ovaltine”。
getline
只是从输入流中读取数据。它永远不会看到命令行参数。(除非你把它们从argv
' stringstream
' '''''''''''''''''''''''s智能''''''''''艰难艰难艰难艰难艰难地''''''''''''''''''''''''''''''''''''艰难是将好,''''''''''''''')
至于#include
,这也与运行时 I/O 无关。它用于告诉编译器(或者通常是预处理器)在编译期间包含 C 源文件。你不能只是#include
一个任意的二进制文件或其他东西。(包含完成后,生成的一堆字符必须形成有效的 C++ 代码)。到运行时,文件已经被包含——到运行时,应用程序甚至不知道该文件存在,因此甚至不会考虑读取它。
精简版:
argv
并argc
用于访问用于启动应用程序的命令行中的内容。它根本与 I/O 无关。getline
用于在运行时从流中输入,并且可以读取几乎任何文件。#include
用于在编译时插入 C++ 代码,只能真正用于源代码。正如您现在所看到的,这三种机制是完全独立且不相关的,几乎永远不能用一种机制代替另一种机制。
作为一名游戏程序员,我不明白我为什么要从 cmd 行读取,但你永远不知道!
通常,对于 GUI 程序,通过命令行传入的东西往往是隐藏或调试选项。
例如,IE 有一个-k
无法在普通首选项中设置的命令行开关。该开关使 IE 在 kiosk 模式下运行,并禁用了很多东西。这是普通用户不应该做的事情,因为如果您在 kiosk 模式下运行 IE,您将无法访问其他任何内容(就像将 Windows 变成 MsIeOS)。
谷歌浏览器有一个命令行参数--first-run
,强制它重新初始化用户首选项并弹出第一个运行设置对话框。如果您碰巧损坏了 Chrome 首选项,这将非常有用。
游戏类似。Halo2 有一个-windowed
命令行参数,可以在窗口而不是全屏中启动游戏。这是 Halo2 命令行参数列表:http: //support.microsoft.com/kb/830487
如果您想不出任何使用命令行参数的方法,请不要使用它。这并不意味着其他人找不到它的用途。
对于各种程序,只需谷歌“[程序名称]命令行参数”即可找出有什么(如果有)。你会发现那些和你一样想不出命令行参数有什么用的人编写的程序,所以这些程序没有任何用处。