Microsoft Visual Studio 2022 中的行尾问题 - C++ 入门示例

问题描述 投票:0回答:1

最近几天我一直在学习C++(几年前我只上过一些CS课程)。我目前正在阅读和学习《C++ Primer》第五版,我遇到了这个问题,我不确定它与代码本身或 Microsoft Visual Studio 2022 有关...

书中给了我们这样的例子: enter image description here

据我目前所知,我了解此代码背后的所有原理,并且我设法使用 Microsoft Visual Studio 2022 编写了类似的代码:

#include <iostream> 

int main() 
{
int currVal = 0, nextVal = 0;
std::cout << "Write a series of numbers: " << std::endl;
int i = 1;

   if (std::cin >> currVal) 
   {        
       while (std::cin >> nextVal)
       {
          if (nextVal == currVal) 
              ++i; 
          else 
          { 
              std::cout << currVal << " occurs " << i << " times" << std::endl;
              currVal = nextVal;
              i = 1;
          }
        }
    std::cout << currVal << " occurs " << i << " times" << std::endl;
   }
return 0;
}

但是,当我运行程序并引入书中给出的序列 - 42 42 42 42 42 55 55 62 100 100 100 - 我的程序停止并且不会继续计算数字 100,如下图所示: enter image description here

只有当我按下另一个键/非整数时,我的程序才会完成: enter image description here

这是我的代码或编译器的问题吗?

提前感谢您的帮助! :D

我还尝试复制并粘贴书中的代码,编译器也做了同样的事情。我想这一定是程序无法识别行尾的问题...我尝试了 ChatGPT 给出的一些解决方案,例如在 while 循环中添加

 !std::cin.eof()
或使用
std::cin.clear(); td::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
清除输入缓冲区代码结束了,它仍然不起作用......

c++ visual-studio-2022 end-of-line
1个回答
0
投票

这是我的代码或编译器的问题吗?

都不是。输入是行缓冲的,因此您需要按 Enter 键让程序开始处理您输入的内容。一旦它处理完您输入的数字,它就会在

处等待新的输入
while (std::cin >> nextVal)

在当前形式下,为了终止程序,您可以通过按 CTRL-Z (Windows) / CTRL-D (*nix) 关闭输入流。这将导致

std::cin >> nextVal
中的提取失败并使
std::cin
处于失败状态。
std::cin
可以通过其成员函数
bool
 转换为 
operator bool() const
,如果
false
处于失败状态,它将返回
std::cin
,如果没有错误,则返回
true

© www.soinside.com 2019 - 2024. All rights reserved.