C ++在到达输入结束后结束do while循环

时间:2012-04-19 19:18:45

标签: c++ loops do-while

我正在尝试编写一个程序,使用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(????);

2 个答案:

答案 0 :(得分:3)

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

while(cin >> number)

答案 1 :(得分:0)

规范的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信号)。一旦输入不再符合项目的格式,它也将停止(例如,如果ItemTypeint并且输入中包含字母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";
}

P.S。我修改了您的代码,以符合其他两个广泛采用的标准:永远不要说using namespace std;,如果您的意思是std::endl,就不要说'\n'