C++ visualc&x2B+;使用控制台:while循环的字符/字符串兼容性问题 不能重复交易; 静态_cast(重复_事务); while(repeat_transaction!=“y”&&repeat_transaction!=“n”) { cout>重复交易; 静态_cast(重复_事务); }
在无效选择循环期间,我曾意外按下“mn”。我注意到控制台读取了C++ visualc&x2B+;使用控制台:while循环的字符/字符串兼容性问题 不能重复交易; 静态_cast(重复_事务); while(repeat_transaction!=“y”&&repeat_transaction!=“n”) { cout>重复交易; 静态_cast(重复_事务); },c++,C++,在无效选择循环期间,我曾意外按下“mn”。我注意到控制台读取了无效选择…,因此,它实际上完成并重新进入while循环。但是,在此之后,控制台终止了程序。如果您输入单个字符“a”或“y”或“n”,它的行为与它应该的一样。结束还是不结束。这是在我尝试使用static_cast强制截断用户输入之前 既然您成功地编译了这个程序,我只能假设repeat\u transaction被指定为char,而不是std::string 使用cin获取字符时,它只获取一个字符,但不会刷新缓冲区。我相信您理解这个问题,
无效选择…
,因此,它实际上完成并重新进入while循环。但是,在此之后,控制台终止了程序。如果您输入单个字符“a”或“y”或“n”,它的行为与它应该的一样。结束还是不结束。这是在我尝试使用static_cast强制截断用户输入之前 既然您成功地编译了这个程序,我只能假设repeat\u transaction
被指定为char
,而不是std::string
使用cin
获取字符时,它只获取一个字符,但不会刷新缓冲区。我相信您理解这个问题,因为您写这篇文章是在我尝试使用静态_cast强制截断用户输入之前。您可以尝试使用cin.ignore(std::numeric\u limits::max(),'\n')代码>而不是静态\u转换(重复\u事务)每次调用cin>>后重复\u事务代码>。这是有缺点的。如果输入'mn',它将按预期工作。它读取不是y
或n
的m
,然后刷新多余的字符,直到找到行尾\n
。如果执行nm
,n
将匹配,并且m
将被丢弃。因此,在这种情况下,它将接受nm
为有效,并退出循环
还有其他方法可能更容易,让你的效果更接近你所寻找的。C++可以一次读取一个字符,而不是使用代码> > GETLION<代码>(请参阅C++以获取更多信息)。然后可以检查字符串的长度是否不等于1
字符。如果不是长度1
,则为无效输入。如果是1
,则需要检查y
和n
。虽然这段代码很基本(也不太复杂),但它可以做一些合理的工作:
#包括
#包括
使用名称空间std;
int main()
{
字符串重复_事务;
CUT显示了代码<重复代码>事务>代码>的定义,如果这个代码是循环的一部分或者有任何较早的输入,那么也显示出<代码> STATICE-CAST(重复事务);< /代码>不做任何事情,它就像写代码> x+1;< /C> >,什么是VisualBasic C++?@ JPW?他可能是VisualC++(代码)> STATICE-CAST(重复事务)。
不会“强制截断用户输入”。它只是将变量repeat\u transaction
从任何类型(您在问题中没有指定)编译时转换为char
。顺便说一句,因为您没有将其分配给任何对象(例如,char x=static\u cast(repeat\u transaction)
)无论如何,它对您的程序没有任何影响。谢谢,字符串方法应该可以很好地工作。我知道std::是首选的,而且兼容性更好,但这是第一学期计算机课的一个简单的期中项目。我使用system()同样,我理解这对于生产代码来说是个坏主意。但是,对于我个人在Windows上的使用,在我的知识和课程范围内,这不会成为一个问题。
cout << "Would you like to make another transaction? (y/n)" << endl;
cin >> repeat_transaction;
static_cast<char>(repeat_transaction);
while (repeat_transaction != 'y' && repeat_transaction != 'n')
{
cout << "Invalid selection: Please enter y or n";
cin >> repeat_transaction;
static_cast<char>(repeat_transaction);
}
#include <iostream>
#include <string>
using namespace std;
int main()
{
string repeat_transaction;
cout << "Would you like to make another transaction? (y/n)" << endl;
getline(cin, repeat_transaction);
while (repeat_transaction.length() != 1 || (repeat_transaction != "y" && repeat_transaction != "n"))
{
cout << "Invalid selection: Please enter y or n";
getline(cin, repeat_transaction);
}
return 0;
}