gpt4 book ai didi

c++ - 输入数据类型检查循环未按预期工作 (C++)

转载 作者:行者123 更新时间:2023-11-28 04:40:08 28 4
gpt4 key购买 nike

我正在尝试获取用户输入,然后检查输入是否为整数,然后将其返回。如果我输入一个整数然后它会返回值但如果输入是一个字符串然后它会无休止地输出 >>>Failed

我正在使用 SO Answer作为基础。

#include "stdafx.h"
#include <iostream>


int getRandomNumber(int maxNum) {
return rand() % maxNum + 1;
}

int getIntInput() {
int input;

while (true) {
std::cout << ">>> ";
std::cin >> input;
std::cin.clear();
std::cout << std::flush;

if (std::cin.fail() || input < 0) {
std::cout << "Failed";
continue;
}

break;
}

return input;
}


int main() {
int numGuessed;
int randomNum = getRandomNumber(100);

numGuessed = getIntInput();
}

最佳答案

您的主要问题是您只清除了错误条件,但从未刷新 有问题的输入,因此输入流停留在错误字符处。常见的方法是读取(并丢弃)失败转换的完整行:

while (true) {
std::cout << ">>> ";
std::cin >> input;
std::cout << std::flush;

if (std::cin.eof()) { // do not try to read past an eof!
input = 0;
break;
}
if (std::cin.fail() || input < 0) {
std::string line;
std::cin.clear(); // reset the fail flag
std::getline(std::cin, line); // read until end of line
std::cout << "Failed";
continue;
}

break;
}

关于c++ - 输入数据类型检查循环未按预期工作 (C++),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50374003/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com