骑消防栓的女孩 发表于 2022-12-7 12:02:59

C++中的while (std::cin >> var)问题

C++Primer中的例题,统计一串整数中连续出现的数字数量。
#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次”。输入了非整型的数字(无效输入)依然会执行下方代码块的代码吗?
2. 我输入“1.1   2    2    2”时,会输出“1出现了1次”。为什么只执行下方代码块中的“std::cout << target << "出现了" << count << "次" << std::endl;”,却不将后续三个2执行while (std::cin >> var) 呢?

lvk 发表于 2022-12-12 15:46:29

target是int型的,而你输入的1.1是浮点型的,此时当输入流遇到“.”时会进入错误状态,它就只读到了一个“1”,所以此时target=1,然后再执行while (std::cin >> var)时,输入流是处于错误状态的,所以不会进入while循环里面
页: [1]
查看完整版本: C++中的while (std::cin >> var)问题