【问题标题】:Reading exactly 4 characters from user, using `std::cin`, into a character array使用 `std::cin` 从用户准确读取 4 个字符到字符数组中
【发布时间】:2016-04-06 04:23:08
【问题描述】:

我想用std::cin从用户那里读取4个字符到一个字符数组中,如果输入超过4个字符则显示错误。

所以我想创建一个长度为 4 的 char 数组并执行以下操作:

char input[4] = "";
std::cin >> input;

但是我如何检查他输入的字符是否超过 4 个?而且如果他输入超过4个字符,会不会覆盖input[4]之后的内存?

【问题讨论】:

  • 您最好使用std::string 进行输入,并在输入后检查length() == 4

标签: c++ arrays io


【解决方案1】:

你可以使用 std::string;

std::string s;
std::getline(std::cin, s);

if(s.size() != 4)
{
    //ERROR
}

【讨论】:

  • 如何检查是否输入了超过 4 个?
  • @ManoMini:为什么?在工作中使用正确的工具有什么问题?尽管这个答案在某些方面存在缺陷(换行!!)
  • @ManoMini 您可以(如果您真的坚持)使用std::cin::get(重载#3),然后忽略并清除流的其余部分。但是使用std::string 是最明显的方式。
  • @ManoMini,您可以使用 std::string 的 C 语言类似物,但它会使代码复杂得多。
【解决方案2】:

可能的解决方案:

您可以为此使用字符串。

代码:

std::string input = "";
std::getline(std::cin,input);

if(input.size() > 4)
    std::cout << "Error";

【讨论】:

    【解决方案3】:

    一种方法是使用 cin.get(),如下所示:

    char input[4];
    for (int i = 0; i < 4; ++i)
    {
        cin.get(input[i]);
    }
    

    值得一提的是,如果你不需要使用 C 风格的字符串,更优雅的方法是使用 std::string:

    std::string input = "";
    for (int i = 0; i < 4; ++i)
    {
        input += cin.get();
    }
    

    【讨论】:

      【解决方案4】:

      使用std::string 的替代方法是使用

      std::basic_istream&amp; std::basic_istream::get( char_type* s, std::streamsize count )

      重载,然后丢弃输入流的其余部分并清除其错误标志,例如:

      #include <iostream>
      #include <limits>
      
      int main()
      {
          const std::size_t buf_size = 5;
          char buf[buf_size];
          std::cin.get(buf, buf_size); // reads buf_size-1 chars from std::cin and adds a '\0'
      
          std::cin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
          std::cin.clear();
          std::cout << buf << std::endl;
      }
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2022-09-27
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多