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