C++ visualc&x2B+;使用控制台:while循环的字符/字符串兼容性问题 不能重复交易; 静态_cast(重复_事务); while(repeat_transaction!=“y”&&repeat_transaction!=“n”) { cout>重复交易; 静态_cast(重复_事务); }

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获取字符时,它只获取一个字符,但不会刷新缓冲区。我相信您理解这个问题,

在无效选择循环期间,我曾意外按下“mn”。我注意到控制台读取了
无效选择…
,因此,它实际上完成并重新进入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;
}