【问题标题】:How to read input with c++ using program.exe < text.txt如何使用 program.exe < text.txt 使用 c++ 读取输入
【发布时间】:2012-04-28 01:10:52
【问题描述】:

我必须根据这些规则读取输入:

“输入由几行文本组成。有些行可能是空的。输入可以从文件中提供,使用诸如prog.exe &lt; input.txt之类的行,在这种情况下,操作系统会适当地指示输入的结尾. 如果您使用键盘输入输入,通常有一种方法可以用某个控制键表示输入结束,具体取决于操作系统(例如,Unix/Linux 风格系统中的 Ctrl+d , 和 Ctrl+z 在 Microsoft 系统中)。”

以前我一直是这样做的

while(getline(cin, data)) {
     if(data == "0") break;
     / * do stuff */
}

所以我可以读取任意多的行并进行计算,然后当我完成后只需键入一个 0 并结束我的程序。我尝试在 .txt 文件中每行输入一个内容列表,然后调用program.exe &lt; myfile.txt,但什么也没发生。

&lt; file.txt 在做什么?

这样调用我的程序时如何正确处理其中的内容?

当你点击 ctrl+z 时,我怎样才能让它计算?

【问题讨论】:

  • 例如,如果在 Windows 中发出命令dir,它将列出当前目录的内容。发出dir &gt; thisDir.txt 会将输出重定向到指定的文本文件。这个逻辑可以用来回答你的部分问题。

标签: c++ file iostream cin


【解决方案1】:

解释你的练习文本:

使用command1 &lt; file1 执行command1file1 作为输入源(相对于键盘)。

这称为重定向标准输入。

std::cin 将从file1 获取输入,而不是从键盘获取。

输入文件的结尾类似于 CTRL+Z(在 Microsoft 系统上,CTRL+D 在大多数其他人身上)。一旦std::getline() 到达文件末尾(或者你读到一行只有“0”),你将退出你的while-loop,然后你可以对你收集的data 进行计算(并且可能存储在某个容器中)。

【讨论】:

    【解决方案2】:

    因为这听起来像是家庭作业...

    提示 1:&gt;&lt;&lt;&lt;&gt;&gt; 是 shell 的“输入/输出重定向”(Windows 上的 CMD)。

    提示 2:getline 返回结果(RTFM 即 http://linux.die.net/man/3/getline,如果您使用 C 版本或用于 C++ http://www.cplusplus.com/reference/string/getline/ 和相应的 istream 方法)

    【讨论】:

    • 不,他显然是在调用getline(istream&, string&),而不是getline(char**, size_t*, FILE*),所以它不返回结果,它只是返回cin。跨度>
    • @AlexeiLevenkov:是的,C 风格的 cmets 确实与 C++ 标签冲突。
    猜你喜欢
    • 1970-01-01
    • 2011-07-23
    • 2021-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-19
    • 1970-01-01
    • 2013-06-19
    相关资源
    最近更新 更多