使用 `std::cin` 从用户读取恰好4个字符,存入字符数组中。

3
我想从用户读取4个字符,使用std::cin,将其存储在字符数组中,如果输入的字符超过4个,则显示错误。
所以我考虑创建一个长度为4的char数组,并执行以下操作:
char input[4] = "";
std::cin >> input;

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


你最好使用 std::string 作为输入,并在输入后检查 length() == 4 - πάντα ῥεῖ
4个回答

3

您可以使用 std::string;

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

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

我该如何检查是否输入了超过4个? - Mano Mini
1
@ManoMini:为什么?使用正确的工具有什么问题吗?尽管这个答案有一些缺陷(换行符!!) - Lightness Races in Orbit
@ManoMini 如果你真的坚持,可以使用std::cin::get(重载#3),然后忽略并清除流中的其余部分。但是,在这里使用std::string是最明显的方法。 - vsoftco
@ManoMini,你可以使用C语言的std::string类似物,但这会使代码变得更加复杂。 - Andreikkaa

3

可能的解决方案:

您可以使用字符串来实现这个目的。

代码:

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();
}

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;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接