骑消防栓的女孩 发表于 2022-12-8 14:09:33

【基础】C++中的while (std::cin >> var)问题

#include <iostream>
int main()
{
      int target = 1, var = 1, count = 1;
      std::cout << "请输入若干个整数:" << std::endl;
      if (std::cin >> target) {
                while (std::cin >> var) {
                        if (var == target)
                              count += 1;
                        else {
                              std::cout << target << "出现了" << count << "次" << std::endl;
                              target = var;
                              count = 1;
                        }
                }
                std::cout << target << "出现了" << count << "次" << std::endl;
      }
      return 0;
}
我有两个问题:
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) 呢?

jhq999 发表于 2022-12-8 14:09:34

骑消防栓的女孩 发表于 2022-12-9 10:45
您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实 ...

点就相当于a,结束了

jhq999 发表于 2022-12-8 15:48:33

我有一个问题,你的代码想实现什么功能?

jhq999 发表于 2022-12-8 16:20:17

本帖最后由 jhq999 于 2022-12-8 16:21 编辑

jhq999 发表于 2022-12-8 15:48
我有一个问题,你的代码想实现什么功能?

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

int main()
{
      char target = 0, var = 1;
      int count = 1;
      std::cout << "请输入若干个整数:" << std::endl;
      if (std::cin >> target) {
                while (std::cin >> var) {
                        if (var == target)
                              count += 1;
                        else {
                              std::cout << target << "出现了" << count << "次" << std::endl;
                              target = var;
                              count = 1;
                        }
                }
                std::cout << target << "出现了" << count << "次" << std::endl;
      }
      return 0;
}

请输入若干个整数:
123423.yyhg.543225\98louhhf6654
1出现了1次
2出现了1次
3出现了1次
4出现了1次
2出现了1次
3出现了1次
.出现了1次
y出现了2次
h出现了1次
g出现了1次
.出现了1次
5出现了1次
4出现了1次
3出现了1次
2出现了2次
5出现了1次
\出现了1次
9出现了1次
8出现了1次
l出现了1次
o出现了1次
u出现了1次
h出现了2次
f出现了1次
6出现了2次
5出现了1次

jhq999 发表于 2022-12-8 16:32:15

#include <stdio.h>
#include <iostream>
using namespace std;

int main()
{
      char target = 0, var = 1;
      int save={0},count = 1;
      std::cout << "请输入若干个整数:" << std::endl;
      if (std::cin >> target) {
                save += 1;
                while (std::cin >> var) {
                        save += 1;
                        if (var != target){
                              std::cout << target << "出现了" << save << "次" << std::endl;
                              target = var;
                              count = 1;
                        }
                }
                std::cout << target << "出现了" << save << "次" << std::endl;
      }
      return 0;
}


请输入若干个整数:
123423.yyhg.543225\98louhhf6654
1出现了1次
2出现了1次
3出现了1次
4出现了1次
2出现了2次
3出现了2次
.出现了1次
y出现了2次
h出现了1次
g出现了1次
.出现了2次
5出现了1次
4出现了2次
3出现了3次
2出现了4次
5出现了2次
\出现了1次
9出现了1次
8出现了1次
l出现了1次
o出现了1次
u出现了1次
h出现了3次
f出现了1次
6出现了2次
5出现了3次

骑消防栓的女孩 发表于 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.1211这四个数时,也和仅输入1.1一样,只输出了“1出现了1次”。既然1.1能够窄化为1执行if下方的代码块,为什么后续满足int类型的2 1 1 反而没有继续输入后续的while语句中输出后三个数字?

以上就是我困惑的两个问题,不知道这么描述可以清楚一些吗,不吝赐教,非常感谢。
页: [1]
查看完整版本: 【基础】C++中的while (std::cin >> var)问题