我正在编写一个直接从用户输入读取数据的程序,我想知道如何(没有循环)从标准输入读取所有数据,直到EOF。我在考虑使用cin.get( input, '\0' )
,但'\0'
并不是真正的EOF字符,它只读到EOF或'\0'
,无论哪个先出现。
或者使用循环是唯一的方法吗?如果是这样,最好的方法是什么?
发布于 2008-10-14 17:16:38
从stdin
读取可变数量的数据的唯一方法是使用循环。我总是发现std::getline()
函数工作得很好:
std::string line;
while (std::getline(std::cin, line))
{
std::cout << line << std::endl;
}
默认情况下,getline()
会一直读到换行符。您可以指定另一个终止字符,但是EOF本身不是一个字符,因此您不能简单地调用一次getline()
。
发布于 2008-10-14 17:43:35
使用循环:
#include <iostream>
using namespace std;
...
// numbers
int n;
while (cin >> n)
{
...
}
// lines
string line;
while (getline(cin, line))
{
...
}
// characters
char c;
while (cin.get(c))
{
...
}
发布于 2008-10-14 17:35:00
通过使用流迭代器,您可以在没有显式循环的情况下完成此操作。我确信它在内部使用了某种循环。
#include <string>
#include <iostream>
#include <istream>
#include <ostream>
#include <iterator>
int main()
{
// don't skip the whitespace while reading
std::cin >> std::noskipws;
// use stream iterators to copy the stream to a string
std::istream_iterator<char> it(std::cin);
std::istream_iterator<char> end;
std::string results(it, end);
std::cout << results;
}
https://stackoverflow.com/questions/201992
复制相似问题