0

今晚我不得不考虑的另一件“新”事情:

int main(argc, char *argv[])

我不明白为什么我想从 cmd 行读取,但你永远不知道!为什么我不直接使用getline并将其读入字符串?或者getch如果是别的什么?

我怀疑答案与要处理的代码量有关——使用这样的东西#include <string>肯定会使用更少的计算能力,对吗?

编辑:回顾这一年,我觉得很傻,在大学里从来没有真正教过关于命令行输入的课程(我知道对,我在上什么样的课程..):)

4

2 回答 2

2

argcargv标准输入输出无关。如果我说

myapp Drink More Ovaltine

argc将是 4,并且argv将包含程序的名称,然后是“Drink”,然后是“More”,然后是“Ovaltine”。

getline只是从输入流中读取数据。它永远不会看到命令行参数。(除非你把它们从argv' stringstream' '''''''''''''''''''''''s智能''''''''''艰难艰难艰难艰难艰难地''''''''''''''''''''''''''''''''''''艰难是将好,''''''''''''''')

至于#include,这也与运行时 I/O 无关。它用于告诉编译器(或者通常是预处理器)在编译期间包含 C 源文件。你不能只是#include一个任意的二进制文件或其他东西。(包含完成后,生成的一堆字符必须形成有效的 C++ 代码)。到运行时,文件已经被包含——到运行时,应用程序甚至不知道该文件存在,因此甚至不会考虑读取它。

精简版:

  • argvargc用于访问用于启动应用程序的命令行中的内容。它根本与 I/O 无关。
  • getline用于在运行时从流中输入,并且可以读取几乎任何文件。
  • #include用于在编译时插入 C++ 代码,只能真正用于源代码。

正如您现在所看到的,这三种机制是完全独立且不相关的,几乎永远不能用一种机制代替另一种机制。

于 2012-12-02T03:42:28.630 回答
0

作为一名游戏程序员,我不明白我为什么要从 cmd 行读取,但你永远不知道!

通常,对于 GUI 程序,通过命令行传入的东西往往是隐藏或调试选项。

例如,IE 有一个-k无法在普通首选项中设置的命令行开关。该开关使 IE 在 kiosk 模式下运行,并禁用了很多东西。这是普通用户不应该做的事情,因为如果您在 kiosk 模式下运行 IE,您将无法访问其他任何内容(就像将 Windows 变成 MsIeOS)。

谷歌浏览器有一个命令行参数--first-run,强制它重新初始化用户首选项并弹出第一个运行设置对话框。如果您碰巧损坏了 Chrome 首选项,这将非常有用。

游戏类似。Halo2 有一个-windowed命令行参数,可以在窗口而不是全屏中启动游戏。这是 Halo2 命令行参数列表:http: //support.microsoft.com/kb/830487

如果您想不出任何使用命令行参数的方法,请不要使用它。这并不意味着其他人找不到它的用途。

对于各种程序,只需谷歌“[程序名称]命令行参数”即可找出有什么(如果有)。你会发现那些和你一样想不出命令行参数有什么用的人编写的程序,所以这些程序没有任何用处。

于 2012-12-02T04:08:26.247 回答