【问题标题】:C++ std::cin is stuck at 80 lines of inputC++ std::cin 卡在 80 行输入
【发布时间】:2015-12-22 22:51:51
【问题描述】:

这是我的代码

int main() 
{
  int total = 0;
  int count = 0;
  std::cin >> total;


  int arr[4] = {0,0,0,0}; 

  while(count < total) 
  { 

    std::cin>>arr[0]>>arr[1]>>arr[2]>>arr[3];

    count++;
    std::cout<<count<<std::endl;

  }

 return 0;

 }  

所以输入的第一行告诉我之后需要阅读多少行......每行有4个数字,用空格分隔。每当行数超过 80(例如 100)时,while 循环就会卡住。我不知道是什么导致了这个问题,我尝试了一些类似 cin.clear() 的方法,但它们只是没有用....

编辑: std::cin 在 10 20 210 10 等格式的 80 行输入后停止读取

带有 LLVM 的 Xcode 无法正常工作...但是使用终端的 g++ 可以工作....http://melpon.org/wandbox/permlink/UXAMgM4ldn2K2NgU 这是在我的终端上使用 g++ 但不是我的 xcode 的代码...

【问题讨论】:

  • 您对问题的描述非常模糊。 “卡住”是什么意思?你是如何测试的?
  • 输入的第 80 行是什么样的?它是否包含不是整数的东西?
  • @JoachimPileborg 它们都是整数,例如 10 20 30 40
  • 无法复制。它在读取 128 行后成功停止。 melpon.org/wandbox/permlink/JBcm4eyDXv2bwMQz
  • 使用调试器查看每个循环迭代中每个变量的状态。 95% 的人在采取此类行动后会自己得到答案。

标签: c++


【解决方案1】:

这是卡住的输出。除非count 的输出被某些东西读取并消耗,否则最终输出缓冲区将满,cout 行将阻塞。

【讨论】:

  • 如何重置输出缓冲区?
  • 为什么要完全重置它?
  • 对不起...你说缓冲区已满所以我想也许重置它会让它继续..我误解了什么吗?
  • 如果你想丢弃数据而不是输出它,删除输出行。
  • 即使我删除了输出行,它也不能在 xcode 中工作,但它可以在带有终端的 g++ 中工作。这很奇怪....
猜你喜欢
  • 2021-06-13
  • 2021-02-26
  • 1970-01-01
相关资源
最近更新 更多