C++ Char数据类型的输入存在问题

C++ Char数据类型的输入存在问题,c++,if-statement,inputstream,do-while,C++,If Statement,Inputstream,Do While,有人知道为什么我在“cInputCommandPrompt”中输入多个字符时,它会循环“Press”Y“继续,而不是像我希望它做的那样只展示一次。我试过清理缓冲区了?如果这就是你所说的,但它似乎不起作用。如果有人能帮助我,我将不胜感激。我基本上希望这样,当用户不输入“Y”时,它只会重新循环到开始,直到他们输入正确的一个。它只是不喜欢我尝试排序的多个字符输入 void ContinueOptions() { bool bValid = false; char cInputComma

有人知道为什么我在“cInputCommandPrompt”中输入多个字符时,它会循环“Press”Y“继续,而不是像我希望它做的那样只展示一次。我试过清理缓冲区了?如果这就是你所说的,但它似乎不起作用。如果有人能帮助我,我将不胜感激。我基本上希望这样,当用户不输入“Y”时,它只会重新循环到开始,直到他们输入正确的一个。它只是不喜欢我尝试排序的多个字符输入

void ContinueOptions()
{
    bool bValid = false;
    char cInputCommandPrompt = 0;
    do{
        std::cout << "Press ""y"" to continue: ";
        std::cin >> cInputCommandPrompt;
        cInputCommandPrompt = std::toupper(static_cast<unsigned char>(cInputCommandPrompt));

        if (!std::cin >> cInputCommandPrompt)
        {

            std::cin.clear();
            std::cin.ignore(100);
            std::cout << "Please try again.";
        }
        else if (cInputCommandPrompt == 'Y')
        {
            bValid = true;
        }
    }while(bValid == false);
    std::cout << "\n";
}
void ContinueOptions()
{
bool bValid=false;
char cInputCommandPrompt=0;
做{
std::cout>cInputCommandPrompt;
cInputCommandPrompt=std::toupper(静态_转换(cInputCommandPrompt));
如果(!std::cin>>cInputCommandPrompt)
{
std::cin.clear();
标准:cin忽略(100);

std::coutif语句中存在无效条件

    if (!std::cin >> cInputCommandPrompt)
应该有

    if (!( std::cin >> cInputCommandPrompt ) )
至少重写函数,如下面的演示程序所示

#include <iostream>
#include <cctype>

void ContinueOptions()
{
    bool bValid = false;
    char cInputCommandPrompt = 0;
    do{
        std::cout << "Press ""y"" to continue: ";

        bValid = bool( std::cin >> cInputCommandPrompt );

        if ( bValid )
        {
            cInputCommandPrompt = std::toupper(static_cast<unsigned char>(cInputCommandPrompt));
            bValid = cInputCommandPrompt == 'Y';
        }

        if ( not bValid )
        {

            std::cin.clear();
            std::cin.ignore(100, '\n');
            std::cout << "Please try again.\n";
        }
    } while( not bValid );
    std::cout << "\n";
}

int main(void) 
{
    ContinueOptions();

    std::cout << "Exiting...\n";

    return 0;
}
#包括
#包括
void ContinueOptions()
{
bool bValid=false;
char cInputCommandPrompt=0;
做{
std::cout>cInputCommandPrompt);
if(bValid)
{
cInputCommandPrompt=std::toupper(静态_转换(cInputCommandPrompt));
bValid=cInputCommandPrompt==Y';
}
如果(非bValid)
{
std::cin.clear();
标准::cin.ignore(100,“\n”);

std::我可以建议您将其放入字符串中。然后直接比较该字符串,或者将其放入输入字符串流中并从中提取。您上面所写的内容出于某种原因创建了一个无止境循环。@GeorgeBradley为什么会有无止境循环?我不知道为什么。我不知道为什么。使用调试器的最佳时机。有好的deb吗ugger将允许您一次一行地完成代码1,这样您就可以轻松地找出导致无休止循环的原因。@GeorgeBradley查看我更新的帖子。由于复制和粘贴您的原始代码,出现了一个打字错误。:)