如果用户输入“z”,我会制作简单的节目以显示“True”,如果用户输入任何其他内容,则显示“False”。 但是,问题是当用户输入多于一个字符时,例如当用户输入'zz'时输出是
True
Input : True
当用户输入如'zs'时应该是错误的,输出是
True
Input : Wrong
这是我的代码
#include <iostream>
using namespace std;
int main()
{
char input;
cout << "Check input" << endl;
while(true){
cout << "Input : ";
cin >> input;
if(input=='z'){
cout << "True" << endl;
} else {
cout << "Wrong" << endl;
}
}
return 0;
}
我想知道是否有办法在不将变量类型改为字符串的情况下阻止这种情况?
我在Windows 10 x64上使用CodeBlocks 16.04(MinGW)和GNU GCC编译器
答案 0 :(得分:2)
你不能通过阅读单个字符来做到这一点。关键是如果用户输入例如 z z 他实际做了进入这两个字符,这些是你从cin
读取时得到的字符。
按照建议阅读std::string
并仅检查字符串的第一个字符。这就像你正在做的那样简单。
所以你可能想要这个:
#include <iostream>
#include <string>
using namespace std;
int main()
{
string input;
cout << "Check input" << endl;
while (true) {
cout << "Input : ";
cin >> input;
if (input.length() > 0 && input[0] == 'z') {
cout << "True" << endl;
}
else {
cout << "Wrong" << endl;
}
}
return 0;
}
答案 1 :(得分:1)
它绝对有可能你必须检查第一个字符,并确保它是唯一输入的字符,而不是刷新缓冲区以除去字符串的其余部分。
代码:
#include <iostream>
#include <string>
using namespace std;
int main()
{
char input;
cout << "Check input" << endl;
while (true) {
cout << "Input : ";
cin >> input;
//Check if the input is z and there is only 1 character inputted
if (cin.rdbuf()->in_avail() == 1 && input == 'z') {
cout << "True" << endl;
}
else {
cout << "Wrong" << endl;
}
//Flush the buffer
cin.clear();
cin.ignore(INT_MAX, '\n');
}
return 0;
}