我一直在拼命想出这个问题,但却无法找到有效的解决方案。我的C ++知识是有限的,所以我的代码也可能是一团糟。
我想要实现的目标:
询问用户输入
检查输入等于是否为1,2或3
我目前的代码:
我已经尝试了几种解决方案及其组合,因此当前状态可能没有多大意义:
`
void execute()
{
printf("Waiting for input:");
while(true) {
char buffer[10];
char input[10];
if(fgets(buffer, sizeof(buffer), stdin) != NULL){
sscanf(buffer, "%s", input);
if (!strcmp(input, "1") || !strcmp(input, "2") || !strcmp(input, "3")) {
varKey = input[0] - '0';
return;
}
else {
printf("Invalid input, try again (1, 2, or 3):");
}
}
//std::cin.sync();
//std::cin.clear();
//std::cin.ignore(INT_MAX,'\n');
flushBuffer();
}
}
void flushBuffer()
{
int c;
while(c = getchar() != '\n' && c != EOF);
}
上下文:
主函数execute()
被重复调用,但是对于每次迭代,一切都被完全重置。 (就像你第一次开始申请一样)
现状:
return
键,输入未正确验证。希望屏幕截图提供更清晰的错误信息。 Screenshot
答案 0 :(得分:0)
所以,作为一个完整的初学者,我可能会将一堆不同的方法混合成一个(非)令人惊讶地无法解决的问题。
这个帖子对我有用:http://www.cplusplus.com/forum/articles/6046/。
这是我的结果代码:
#include <string>
#include <sstream>
void execute()
{
std::cout << "Waiting for input: ";
while(true) {
int value = 0;
std::string input;
std::getline(std::cin, input);
std::stringstream myStream(input);
//Try to convert input to integer
if (myStream >> value) {
if(value == 1 || value == 2 || value == 3) {
varKey = value;
return;
}
}
std::cout << "Invalid input, try again (1, 2, or 3): ";
}
}