这部分c ++代码有什么问题?

时间:2013-09-24 10:03:32

标签: c++

int f =0;
    std::cout << " do you want to use 1. component y or n " << std::endl;
    std::cin >>f;
    if(f == 'y' || f =='n'){
        if (f =='y'){
            this->decisionvector[0] = 1;
        }else 
            this->decisionvector[0] = 0;

    }

    std::cout << " do you want to use 2. component y or n " << std::endl;
    std::cin >>f;
    if(f == 'y' || f=='n'){
        if (f =='y'){
            this->decisionvector[1] = 2;
        }else 
            this->decisionvector[1] = 0;
        f= 0;
    }
    std::cin.clear(); 
    std::cout << " do you want to use 3. component y or n " << std::endl;
    std::cin >>f;
    if(f == 'y' || f =='n'){
        if (f =='y'){
            this->decisionvector[2] = 4;
        }else 
            this->decisionvector[2] = 0;
        f= 0;
    }
    std::cin.clear(); 
    std::cout << " do you want to use 4. component y or n " << std::endl;
    std::cin >>f;
    if(f == 'y' || f =='n'){
        if (f =='y'){
            this->decisionvector[3] = 8;
        }else 
            this->decisionvector[3] = 0;
        f= 0;
    }

为什么我只能在第一个if语句中设置f,程序不会停止在其他语句中?

3 个答案:

答案 0 :(得分:3)

您应该将int f更改为char f

答案 1 :(得分:2)

int f =0;
std::cin >>f;

std::cin读取并解释字符序列。

如果fint,则会使用提取运算符int的{​​{1}}重载。此运算符将尝试将输入格式化为整数。

如果用户传递了字符operator>>,则操作员将无法将其解释为整数,并将'y'存储在0中。您可以使用f检查流的错误状态。

如果你想阅读一个角色,你必须使用cin.fail()

答案 2 :(得分:0)

在第二个区块中,您正在阅读k但是使用y ...

std::cin >>k;
if(k == 'y' || k=='n'){
    if (f =='y'){
        this->decisionvector[1] = 2;
    }else 
        this->decisionvector[1] = 0;
    f= 0;
}