繁体   English   中英

C ++:在while(cin)循环中,有时会忽略该循环

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

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

这是循环:

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循环的结尾应该是什么? 建立循环的方式将永远不会结束。 另外,您不会在循环内的任何地方使用单词变量,所以它的意义是什么。 如果要循环播放直到用户输入一些退出代码,它应该如下所示:

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;
    }

}

首先,您没有给出终止条件,所以也许这段代码对您有用...

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();

}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM