C :在(CIN)循环中,有时会忽略循环

C++: in while(cin) loop, sometimes the loop is ignored

本文关键字:循环 CIN      更新时间:2023-10-16

在我的代码中,我尝试创建一个循环,但是偶尔会在获得输入后忽略整个循环。

这是循环:

while(std::cin >> word){
        std::cin.clear();
        qType = (rand()%2) + 1;
        letter = (rand()%26) + 1;
        if(qType == 1){
            std::cout << letter << std::endl;
        }else if(qType == 2){
            std::cout << Letters[letter] << std::endl;
        }
}

当我写入输入时,循环成功输出字母或相应的数字,但不久之后,它就停止这样做了。我发现有类似问题的人,但对于他们来说,解决方案是添加cin.clear((;函数,我首先添加到末尾,然后启动,但没有解决问题。

首先,您没有给出终止条件,因此该代码也许适合您...

while(word!="exit"){
    cin >> word;
    qType = (rand()%2) + 1;
    letter = (rand()%26) + 1;
    if(qType == 1){
        cout << letter << std::endl;
    }else if(qType == 2){
        cout << Letters[letter] << std::endl;
    }
            cin.clear();

}

首先,循环时你应该结束什么?您设置循环的方式将永远不会结束。另外,您也不会在循环内部使用Word变量,这是什么意义。如果要循环直到用户输入一些退出代码,则应该看起来像这样:

std::string word;
while (word != "exit") {
    std::cin >> word;
    // your code
}

尝试此

while(std::cin >> word && word != 'n'){
    std::cin.clear();
    qType = (rand()%2) + 1;
    letter = (rand()%26) + 1;
    if(qType == 1){
        std::cout << letter << std::endl;
    }else if(qType == 2){
        std::cout << Letters[letter] << std::endl;
    }

}