在C++中使用cin有很多麻烦

-5 c++ cin

我似乎无法想出一大堆代码来捕获用户,直到它得到一个肯定的int并且如果用户意外地输入一个字符或随机垃圾如"-1-3-4-39-32xfi3"则提示用户/".我只需要一个整洁的防故障cin循环结构,无法搞清楚.谢谢.

我只是想知道其他人在控制台输入方面做了什么,以便从中得出绘制的想法.如何绕过糟糕的输入.

Ker*_* SB 6

做这个:

#include <cstdlib>
#include <iostream>
#include <sstream>
#include <string>

int main()
{
    for (std::string line; std::getline(std::cin, line); )
    {
        std::istringstream iss(line);
        unsigned int n;

        if (!(iss >> n >> std::ws) || iss.get() != EOF)
        {
            std::cout << "Bad input ('" << line << "'), ignoring.\n";
            continue;
        }

        std::cout << "Success! We read: " << n << "\n";
        return EXIT_SUCCESS;
    }

    std::cout << "Premature end of input!\n";
    return EXIT_FAILURE;
}
Run Code Online (Sandbox Code Playgroud)

换句话说,继续读取用户的输入,直到您能够将输入解析为所需的数据类型.我选择了基于行的处理,这通常是最自然的,但是如果不正确就可以跳过任何"记录"的概念.请注意,程序可能永远不会成功,即如果用户拒绝提供任何好的输入.

  • @remyabel:不.这是完全正确的. (2认同)