首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >如何在C++中从cin读取到EOF

如何在C++中从cin读取到EOF
EN

Stack Overflow用户
提问于 2008-10-14 17:01:01
回答 9查看 248.1K关注 0票数 94

我正在编写一个直接从用户输入读取数据的程序,我想知道如何(没有循环)从标准输入读取所有数据,直到EOF。我在考虑使用cin.get( input, '\0' ),但'\0'并不是真正的EOF字符,它只读到EOF或'\0',无论哪个先出现。

或者使用循环是唯一的方法吗?如果是这样,最好的方法是什么?

EN

回答 9

Stack Overflow用户

发布于 2008-10-14 17:16:38

stdin读取可变数量的数据的唯一方法是使用循环。我总是发现std::getline()函数工作得很好:

代码语言:javascript
复制
std::string line;
while (std::getline(std::cin, line))
{
    std::cout << line << std::endl;
}

默认情况下,getline()会一直读到换行符。您可以指定另一个终止字符,但是EOF本身不是一个字符,因此您不能简单地调用一次getline()

票数 90
EN

Stack Overflow用户

发布于 2008-10-14 17:43:35

使用循环:

代码语言:javascript
复制
#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))
{
   ...
}

resource

票数 67
EN

Stack Overflow用户

发布于 2008-10-14 17:35:00

通过使用流迭代器,您可以在没有显式循环的情况下完成此操作。我确信它在内部使用了某种循环。

代码语言:javascript
复制
#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;
}
票数 53
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/201992

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档