鱼C论坛

 找回密码
 立即注册
查看: 2944|回复: 5

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

[复制链接]
发表于 2022-12-8 14:09:33 | 显示全部楼层 |阅读模式
30鱼币
  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次”。为什么输入了非整型的数字(无效输入)依然会执行下方代码块的代码?(如输入字母a时就不执行if了)
2. 我输入“1.1   2    2    2”时,只会输出“1出现了1次”。为什么只执行下方代码块中的“std::cout << target << "出现了" << count << "次" << std::endl;”,却不将后续三个满足int类型的2执行while (std::cin >> var) 呢?
最佳答案
2022-12-8 14:09:34
骑消防栓的女孩 发表于 2022-12-9 10:45
您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实 ...


点就相当于a,结束了

最佳答案

查看完整内容

点就相当于a,结束了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 14:09:34 | 显示全部楼层    本楼为最佳答案   
骑消防栓的女孩 发表于 2022-12-9 10:45
您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实 ...


点就相当于a,结束了
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 15:48:33 | 显示全部楼层
我有一个问题,你的代码想实现什么功能?
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 16:20:17 | 显示全部楼层
本帖最后由 jhq999 于 2022-12-8 16:21 编辑
jhq999 发表于 2022-12-8 15:48
我有一个问题,你的代码想实现什么功能?


看看这是不是你想要的
  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;

  4. int main()
  5. {
  6.         char target = 0, var = 1;
  7.         int count = 1;
  8.         std::cout << "请输入若干个整数:" << std::endl;
  9.         if (std::cin >> target) {
  10.                 while (std::cin >> var) {
  11.                         if (var == target)
  12.                                 count += 1;
  13.                         else {
  14.                                 std::cout << target << "出现了" << count << "次" << std::endl;
  15.                                 target = var;
  16.                                 count = 1;
  17.                         }
  18.                 }
  19.                 std::cout << target << "出现了" << count << "次" << std::endl;
  20.         }
  21.         return 0;
  22. }
复制代码
  1. 请输入若干个整数:
  2. 123423.yyhg.543225\98louhhf6654
  3. 1出现了1次
  4. 2出现了1次
  5. 3出现了1次
  6. 4出现了1次
  7. 2出现了1次
  8. 3出现了1次
  9. .出现了1次
  10. y出现了2次
  11. h出现了1次
  12. g出现了1次
  13. .出现了1次
  14. 5出现了1次
  15. 4出现了1次
  16. 3出现了1次
  17. 2出现了2次
  18. 5出现了1次
  19. \出现了1次
  20. 9出现了1次
  21. 8出现了1次
  22. l出现了1次
  23. o出现了1次
  24. u出现了1次
  25. h出现了2次
  26. f出现了1次
  27. 6出现了2次
  28. 5出现了1次
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 16:32:15 | 显示全部楼层
  1. #include <stdio.h>
  2. #include <iostream>
  3. using namespace std;

  4. int main()
  5. {
  6.         char target = 0, var = 1;
  7.         int save[128]={0},count = 1;
  8.         std::cout << "请输入若干个整数:" << std::endl;
  9.         if (std::cin >> target) {
  10.                 save[target] += 1;
  11.                 while (std::cin >> var) {
  12.                         save[var] += 1;
  13.                         if (var != target){
  14.                                 std::cout << target << "出现了" << save[target] << "次" << std::endl;
  15.                                 target = var;
  16.                                 count = 1;
  17.                         }
  18.                 }
  19.                 std::cout << target << "出现了" << save[target] << "次" << std::endl;
  20.         }
  21.         return 0;
  22. }

复制代码
  1. 请输入若干个整数:
  2. 123423.yyhg.543225\98louhhf6654
  3. 1出现了1次
  4. 2出现了1次
  5. 3出现了1次
  6. 4出现了1次
  7. 2出现了2次
  8. 3出现了2次
  9. .出现了1次
  10. y出现了2次
  11. h出现了1次
  12. g出现了1次
  13. .出现了2次
  14. 5出现了1次
  15. 4出现了2次
  16. 3出现了3次
  17. 2出现了4次
  18. 5出现了2次
  19. \出现了1次
  20. 9出现了1次
  21. 8出现了1次
  22. l出现了1次
  23. o出现了1次
  24. u出现了1次
  25. h出现了3次
  26. f出现了1次
  27. 6出现了2次
  28. 5出现了3次
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2022-12-9 10:45:26 | 显示全部楼层
jhq999 发表于 2022-12-8 15:48
我有一个问题,你的代码想实现什么功能?

您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实现功能为:输入一连串整数数字,判断其中连续出现的整数个数并“输出x出现了x次”,当输入的不是整数时,程序中断。例如 1 1 2 1 a,输出:1出现了2次,2出现了1次,1出现了1次,中断。

我目前的问题是:
当输入的数串仅是1.1时,1.1不符合int,我原以为就会和输入a一样直接不执行if。但结果程序将其窄化为1输入target,输出了“1出现了1次”。第一个问题是,为什么1.1和a一样不符合int类型,但1.1为什么会执行if并输出了一个结果?

当输入的数串是1.1  2  1  1这四个数时,也和仅输入1.1一样,只输出了“1出现了1次”。既然1.1能够窄化为1执行if下方的代码块,为什么后续满足int类型的2 1 1 反而没有继续输入后续的while语句中输出后三个数字?

以上就是我困惑的两个问题,不知道这么描述可以清楚一些吗,不吝赐教,非常感谢。
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2025-4-22 22:23

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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