鱼C论坛

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

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

[复制链接]
发表于 2022-12-8 14:09:33 | 显示全部楼层 |阅读模式
30鱼币
#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) 呢?
最佳答案
2022-12-8 14:09:34
骑消防栓的女孩 发表于 2022-12-9 10:45
您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实 ...


点就相当于a,结束了

最佳答案

查看完整内容

点就相当于a,结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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


点就相当于a,结束了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2022-12-8 15:48:33 | 显示全部楼层
我有一个问题,你的代码想实现什么功能?
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 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次
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

int main()
{
        char target = 0, var = 1;
        int save[128]={0},count = 1;
        std::cout << "请输入若干个整数:" << std::endl;
        if (std::cin >> target) {
                save[target] += 1;
                while (std::cin >> var) {
                        save[var] += 1;
                        if (var != target){
                                std::cout << target << "出现了" << save[target] << "次" << std::endl;
                                target = var;
                                count = 1;
                        }
                }
                std::cout << target << "出现了" << save[target] << "次" << 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次
想知道小甲鱼最近在做啥?请访问 -> 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语句中输出后三个数字?

以上就是我困惑的两个问题,不知道这么描述可以清楚一些吗,不吝赐教,非常感谢。
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

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

本版积分规则

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

GMT+8, 2024-12-26 09:04

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

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