【问题标题】:Character '<' in command prompt命令提示符中的字符“<”
【发布时间】:2014-05-03 20:00:13
【问题描述】:

我有一个正在编写的程序,我已经完成了它,但是它的要求/规范说:

在“命令提示符”中,如果有人这样运行你的程序:

Peter David < savednames.txt 

它应该打印出savednames.txt 中与“Peter”和“David”中的每一个匹配的名称

我已经编写了程序,但我自己的程序是交互式的,即它要求文件,然后是您要搜索的名称,然后打印匹配项。

它工作得很好,但我不明白程序在命令提示符下的运行是什么意思:"Peter David &lt; savednames.txt" 是什么意思。我在 Microsoft Windows 上使用 C++。

我需要您的帮助来解释它以及如何在我的代码中实现它...是某种运算符重载还是...我不明白!

【问题讨论】:

  • 大多数 shell 使用这种表示法向程序的标准输入提供指定文件的内容。所以只需从标准输入中读取。
  • 感谢编辑...这是我第一次使用 stackoverflow :)
  • 我认为规范的意思是如果程序名称是 xxx.bat,那么你必须输入 xxx Peter David 。在这种情况下,您可以将 Peter、David 和其他任何内容作为参数,并将 savenames 中的任何内容作为输入。
  • 感谢您的回复。但他们所说的“彼得”“大卫”是什么意思?它们是我需要在我的代码中实现的参数参数还是什么? ....天哪!我很困惑... :(
  • 正好杯子!你对规范非常了解……我该怎么做……

标签: c++ file class oop output


【解决方案1】:

在命令行中,&lt; 用于输入重定向。 Shell 打开名称跟在&lt; 后面的文件,并将其内容复制到程序的标准输入中。

因此,如果您调用program input.txt,您可以使用std::ifstream 或其他方式打开文件并读取其内容;如果你调用了program &lt; input.txt,你可以使用cin从标准输入读取文件的内容。

您也可以对输出执行相同的操作。不要打开文件并在代码中写入,而是写入标准输出并将您的程序称为program &gt; output.txt

【讨论】:

  • 如果用program input.txt调用,他可以通过argv[1]访问input.txt,对吗?
  • @0x499602D2:是的。但是如果你调用program &lt; input.txt&lt;input.txt 都不在 argv 中。
  • 谢谢,但是字符'
  • @user3599953:他们只是普通的command-line argumentsargv[1] 将是 Peterargv[2] 将是 David
  • @user3599953 这些是程序参数。它们通过main() 的第二个参数argv 访问。第一个参数是可执行文件的路径 (argv[0]),其余的是程序参数 (argv[1] ... argv[n])。
【解决方案2】:
yourprogramname Peter David < savednames.txt 

表示您的程序将以 Peter 作为第一个参数,David 作为第二个参数调用,其标准输入将连接到读取 savednames.txt 的流。

您只需要一次读取一行标准输入,并根据您收到的参数进行处理。

您只需要修改已经从命令行获取名称的代码(有限制吗?可能有 三个 名称吗?还是四个?您需要考虑这一点)和从标准输入流中读取数据,无需打开文件。

【讨论】:

  • 太棒了!...我想我得到了一些东西, std::vector 可以作为参数工作吗?这样他们就可以要求他们想要的任何数量的名字? ...或者我会像那样走向灌木丛吗?
  • ...或者我会让我的程序类似于: Myclass::MyFunction(vector, string) 其中“向量”将是 Peter 和 David,以及 savednames.txt将是第二个参数“字符串”。
  • @user3599953 程序参数在main() 中使用第二个参数argvchar* 的数组)访问。用户可以输入任意数量的参数,argv 将保留它们。您可以选择将参数从 argv 复制到 std::vector&lt;std::string&gt;,但它不需要允许可变数量的参数。
  • 我会关注您的 cmets 并继续尝试/测试它以查看结果...非常感谢...谢谢大家!非常感谢。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-04-26
  • 1970-01-01
  • 2010-11-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多