【问题标题】:C++ End a do while loop after reaching the end of inputC ++在到达输入结束后结束do while循环
【发布时间】:2012-04-20 03:34:46
【问题描述】:

我正在尝试编写一个使用 C++ 将输入转换为其二进制形式的程序。但是,我对继续翻译每个附加输入的 do-while 循环部分有一点问题。 do-while 循环的条件搞砸了,所以输出变成了一个无限循环。

do{
   cin>>number;
   if (number<0)
      cout<< number<< " (base 10) is not a positive integer"<<endl;
   else if (number==0) 
      cout<< number<< " (base 10) = 0 (base 2) ";
   else {
      binary= binaryConverter(number);
      cout<< number << " (base 10) =";
      cout<< binary << " (base 2)";
   }
   cout<< endl;
}while(????);

【问题讨论】:

  • 实际结束它的条件是什么?如果用户停止输入?
  • 人们为什么要标记这样的C?

标签: c++ loops do-while


【解决方案1】:

这将循环直到接收到终止信号(如CTRL-C),然后终止流

while(cin >> number)

【讨论】:

  • @user1344877 如果此答案对您有用,那么您应该考虑通过单击绿色复选标记“接受”它。这将表明这是您问题的官方接受的答案,并将给 victor.t 一些额外的声誉。见How does accepting an answer work?
  • 还值得一提的是,当它收到文件结束指示(来自控制台:CTRL-D 或 CTRL-Z,取决于环境)时,这样的循环将正常退出。
【解决方案2】:

规范的 C++ 输入循环如下所示:

ItemType item;
while ( input_stream >> item ) {
   // Do something with item, for example:
   //   std::cout << item;  or,
   //   container.push_back(item);  or,
   //   sum += item;  or whatever.
}

这种循环将在每个输入项中运行一次,将在文件结尾处停止(无论是磁盘文件的结尾还是控制台发出的 EOF 信号)。一旦输入不再符合项目的格式(例如,如果 ItemType 是 int 并且输入中包含字母 Q),它也会停止。

具体来说,应该从不使用.eof() 或.good() 作为循环条件。几乎不应该使用do-while 作为输入循环。

在您的情况下,循环应如下所示:

while(std::cin >> number) {
  std::cin>>number;
  if (number<0)
    std::cout<< number<< " (base 10) is not a positive integer";
  else if (number==0) 
    std::cout<< number<< " (base 10) = 0 (base 2) ";
  else {
    binary= binaryConverter(number);
    std::cout<< number << " (base 10) =";
    std::cout<< binary << " (base 2)";
  }
  std::cout<< "\n";
}

附言。我修改了您的代码以符合另外两个广泛采用的标准:永远不要说 using namespace std; 和永远不要说 std::endl 当你的意思是 '\n'。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2019-03-19
    • 2020-08-26
    • 1970-01-01
    • 1970-01-01
    • 2018-04-06
    • 2016-08-24
    • 1970-01-01
    • 2013-10-25
    相关资源
    最近更新 更多