使用`std :: cin`将用户正好4个字符读入字符数组

时间:2016-01-01 19:22:04

标签: c++ arrays io

我希望用户使用std::cin将4个字符读入字符数组,如果输入超过4个字符则显示错误。

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

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

但我如何检查他是否输入超过4个字符?如果他输入超过4个字符,那么在input[4]之后它不会覆盖内存吗?

4 个答案:

答案 0 :(得分:3)

您可以使用std :: string;

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

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

答案 1 :(得分:3)

可能的解决方案:

您可以为此目的使用字符串。

<强>代码:

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

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

答案 2 :(得分: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();
}

答案 3 :(得分:1)

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

std::basic_istream& 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;
}