【基础】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) 呢? 骑消防栓的女孩 发表于 2022-12-9 10:45
您好 我仔细阅读了你的回答,其实我的代码功能没有这么复杂,这只是c++primer上第一章的一个简单例题,实 ...
点就相当于a,结束了
我有一个问题,你的代码想实现什么功能? 本帖最后由 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次 #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次
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]