鱼C论坛

 找回密码
 立即注册
查看: 2466|回复: 1

[已解决]C++中的while (std::cin >> var)问题

[复制链接]
发表于 2022-12-7 12:02:59 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
C++Primer中的例题,统计一串整数中连续出现的数字数量。
  1. #include <iostream>
  2. int main()
  3. {
  4.         int target = 1, var = 1, count = 1;
  5.         std::cout << "请输入若干个整数:" << std::endl;
  6.         if (std::cin >> target) {
  7.                 while (std::cin >> var) {
  8.                         if (var == target)
  9.                                 count += 1;
  10.                         else {
  11.                                 std::cout << target << "出现了" << count << "次" << std::endl;
  12.                                 target = var;
  13.                                 count = 1;
  14.                         }
  15.                 }
  16.                 std::cout << target << "出现了" << count << "次" << std::endl;
  17.         }
  18.         return 0;
  19. }
复制代码


我有两个问题:
1. 我只输入一个非整数,如1.1,但还是会输出“1出现了1次”。输入了非整型的数字(无效输入)依然会执行下方代码块的代码吗?
2. 我输入“1.1   2    2    2”时,会输出“1出现了1次”。为什么只执行下方代码块中的“std::cout << target << "出现了" << count << "次" << std::endl;”,却不将后续三个2执行while (std::cin >> var) 呢?
最佳答案
2022-12-12 15:46:29
target是int型的,而你输入的1.1是浮点型的,此时当输入流遇到“.”时会进入错误状态,它就只读到了一个“1”,所以此时target=1,然后再执行
  1. while (std::cin >> var)
复制代码
时,输入流是处于错误状态的,所以不会进入while循环里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-12 15:46:29 | 显示全部楼层    本楼为最佳答案   
target是int型的,而你输入的1.1是浮点型的,此时当输入流遇到“.”时会进入错误状态,它就只读到了一个“1”,所以此时target=1,然后再执行
  1. while (std::cin >> var)
复制代码
时,输入流是处于错误状态的,所以不会进入while循环里面
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-30 18:44

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表