我希望用户使用std::cin
将4个字符读入字符数组,如果输入超过4个字符则显示错误。
所以我考虑创建一个长度为4的char数组并执行以下操作:
char input[4] = "";
std::cin >> input;
但我如何检查他是否输入超过4个字符?如果他输入超过4个字符,那么在input[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;
}