首页 > 解决方案 > 输入字符时 cin 跳过

问题描述

我有一个程序,我必须在其中输入两个双精度数,并且它必须在字符“|”时终止 被输入。但是,当我输入字符 '|' cin 被跳过,程序将直接运行而不会阻塞。输入字符后如何终止程序?

我的代码是:

#include "std_lib_facilities.h"

int main()
{
    bool start = true;
    while(start)
    {
        double number1, number2 = 0;
        cout << "Enter two doubles\n";
        cin >> number1 >> number2;

        if((number1 == double{'|'}) || (number2 == double{'|'}))
        {
            start = false;
        }

        cout << "The value of number1 is: " << number1 << '\n';
        cout << "The value of number2 is: " << number2 << '\n';
    }
    return 0;
}

标签: c++charactercin

解决方案


您不能将|字符读入double变量。 operator>>将无法提取数字并将failbit在流上设置 ,您可以对其进行测试,例如:

#include "std_lib_facilities.h"

int main()
{
    do
    {
        double number1, number2;

        cout << "Enter two doubles\n";
        if (!(cin >> number1 >> number2))
            break;

        cout << "The value of number1 is: " << number1 << '\n';
        cout << "The value of number2 is: " << number2 << '\n';
    }
    while (true);

    return 0;
}

否则,首先将输入读取为字符串,然后根据需要验证格式,例如:

#include "std_lib_facilities.h"
#include <string>

int main()
{
    do
    {
        std::string input1, input2;
        double number1, number2;

        cout << "Enter two doubles\n";
        if (!(cin >> input1 >> input2))
            break;

        if ((input == "|") || (input2 == "|"))
            break;

        number1 = std::stod(input1);
        number2 = std::stod(input2);

        cout << "The value of number1 is: " << number1 << '\n';
        cout << "The value of number2 is: " << number2 << '\n';
    }
    while (true);

    return 0;
}

推荐阅读