c++ - 如何终止从cin读取?

标签 c++

我已经尝试了这里列出的一系列方法,但没有一个有效。它总是在等待更多的输入。

我试过 while(std::getline(std::cin, line)) 和下面的方法,似乎没有任何效果:

#include <iostream>
#include <sstream>

using namespace std;

int main(){
  long length = 1UL<<32;
  int array[length];
  // memset(array, 0, (length-1) * sizeof(int));

  for(int i = 0; i < length; i++)
    array[i] = 0;
  string line;
  int num;
  while(!cin.eof()){
    getline(cin,line);
    stringstream ss(line);
    ss >>num;
    array[num]++;
  }
  for(int i = 0; i < length; i++)
      if(array[i]){
          cout << i << ": ";
          cout << array[i] << endl;
      }
}

最佳答案

首先,不要使用std::cin.eof() 来控制循环!它不起作用。此外,您始终需要在输入后检查输入是否成功。

就是说,要终止输入,您需要输入适当的文件结尾字符,可能在行的开头(它的工作方式在某种程度上完全取决于系统、某些设置等)。在 Windows 上,您将使用 Ctrl-Z,在 UNIX 上,您将使用 Ctrl-D。

关于c++ - 如何终止从cin读取?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19991729/

相关文章:

c++ - 使用 `hana::is_valid` 因 const 引用而失败

c++ - 寻找最大子数组的分而治之算法 - 如何同时提供结果子数组索引?

c++ - 当给定默认模板参数时,将选择什么模板值?

c++ - 如何告诉 Visual Studio 包含库的 .cpp 文件?

c++ - 在迷宫 C++ 中查找路径是否存在

c++ - 使用 CIMG for c++ 设置线条图案

c++ - Boost 插件选择

Linux 中的 C++ 串行通信

c++如何编写编译器可以轻松针对SIMD优化的代码?

c++ - boost::bind 和 boost::lambda::bind 有什么区别?