C++ Char数据类型的输入存在问题
有人知道为什么我在“cInputCommandPrompt”中输入多个字符时,它会循环“Press”Y“继续,而不是像我希望它做的那样只展示一次。我试过清理缓冲区了?如果这就是你所说的,但它似乎不起作用。如果有人能帮助我,我将不胜感激。我基本上希望这样,当用户不输入“Y”时,它只会重新循环到开始,直到他们输入正确的一个。它只是不喜欢我尝试排序的多个字符输入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
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查看我更新的帖子。由于复制和粘贴您的原始代码,出现了一个打字错误。:)