如何使用重定向的标准输入读取文件,即 cin(注意:不使用 ifstream)
Posted
技术标签:
【中文标题】如何使用重定向的标准输入读取文件,即 cin(注意:不使用 ifstream)【英文标题】:How to read a file using the redirected standard input, i.e. cin(Note:without using ifstream) 【发布时间】:2017-01-07 09:12:12 【问题描述】:另外:我通过在 VS2013 的属性页中编辑命令参数来重定向标准输入。我正在做一个小项目,它要求我在不使用 ifstream 的情况下读取文件,因为据说:您可以用于此分配的唯一库是 iostream、iomanip 和 string。
【问题讨论】:
std::cin >> i
、std::getline(std::cin)
等。看看istream
s 可以做什么:en.cppreference.com/w/cpp/io/basic_istream
修改属性页并不是一种理想的方式
【参考方案1】:
您想将 cin 重定向到一个文件,为此您需要使用
设置与 cin 关联的流缓冲区ios::rdbuf()
看看here
还有更多关于 SO here 和 here
【讨论】:
【参考方案2】:当文件被重定向到 stdin(标准输入)时,您应该从标准输入的包装器 std::cin
(std::istream
的实例)中读取。 std::basic_ifstream
是std::basic_istream
的子类,所以大部分阅读功能都在它们中可用,你应该熟悉它们。这意味着您可以使用:
std::getline
逐行读取文件:
std::string s;
while(std::getline(std::cin, s))
std::cout << s << std::endl;
operator >>
读取由空格字符分隔的字段:
while(std::cin)
std::string s;
std::cin >> s;
std::cout << s << std::endl;
在此处查看其运算符和函数的完整列表:http://en.cppreference.com/w/cpp/io/basic_istream
【讨论】:
是的,这就是我想要的答案!非常感谢你! ! ! 很难回答这个问题。问题是关于重定向不从 istreams 读取【参考方案3】:您可以使用“freopen”功能。示例:
freopen("input.txt","r",stdin)。
这意味着您读取文件“input.txt”并将其内容保存到“stdin”。现在,你可以使用“cin”了。
【讨论】:
这不回答问题(freopen 不 read 文件)并使用 C 库(而问题被明确标记为 C++) 那么,如何在不打开文件的情况下使用 std::cin >> i, std::getline(std::cin) 从文件中读取数据?./a.out < file.txt
也就是所谓的文件输入重定向:sc.tamu.edu/help/general/unix/redirection.html
非常感谢。我以前从来不知道。以上是关于如何使用重定向的标准输入读取文件,即 cin(注意:不使用 ifstream)的主要内容,如果未能解决你的问题,请参考以下文章
使用带有标准输入和标准输出重定向的 2 进程管道时如何避免标准输入上的重复输入