如何阻止用户在c ++中输入更多输入?

时间:2013-11-21 16:10:20

标签: c++

假设我创建了一个20字节的字符数组,并提示用户输入他们的名字,前提是他们的名字不应超过20个字符...... 例如:

char Name[20];
gets(Name);

现在假设他的名字是 abcdefghijklmnopqrstuvwxyz 但是一旦他进入 abcdefghijklmnopqrst ,名称就不应该进一步输入......用户提供的进一步输入都不会出现在控制台屏幕上......只有光标应该闪烁直到他按下进入。那怎么办?

更多信息

操作系统: Windows 7

编译器: Visual C ++ 2010 Express

2 个答案:

答案 0 :(得分:3)

联机帮助页指出:

  

永远不要使用gets()。因为在不事先知道数据的情况下无法判断get()将读取多少个字符,并且因为gets()将继续存储超出缓冲区末尾的字符,所以使用它是非常危险的。它已被用来打破计算机安全。请改用fgets()。

所以你可以使用fgets

char *fgets(char *s, int size, FILE *stream);

然而输入序列还没有停止;但是,如果使用正确,您将不再遇到未定义的行为和安全漏洞。

您应该更好地使用C ++工具,例如std::stringstd::getline和标准的iostream。它们不会使您停止输入,但是,当以规范方式使用时,它们会阻止安全漏洞。

标准备选方案摘要:

  • gets() 无法正确使用。当你使用它时,人们可能会死亡(因为我不是在开玩笑,你不会在我脸上露出笑容)。 可以证明没有正确的方法可以使用它。请不要忘记它,但要将其从工具箱中删除现在
  • fgets() 可以正确使用,但有很多机会滥用它。
  • iostreamsstring s 会自动正确使用。使用它们。

不幸的是,没有内置的解决方案从输入读取最多N个字符而不必丢弃输入的多余字符。您必须使用第三方库或自己动手。< / p>

答案 1 :(得分:0)

这是愚蠢的回答: 例如,如果您希望用户输入最多20个字符的名称 用。创建一个char数组。大小[20] 要求用户输入名称的大小,如果小于或等于20,则检查号码的有效性。然后继续并添加名称,然后再请用户输入大小。 您可以使用字符串而不是char,但这不会确保用户实际遵循大小规则 例如,用户可以输入大小10,程序将允许他输入名称,但是一旦他允许使用.string,他可以根据自己的意愿编写。

使用char数组。对于20或更少的名字。字符

例如,代码需要一个简单的for循环 因为我们已经给出的尺寸小于或等于.20

For(int i = 0; i&lt; 20; i ++) CIN&GT;&GT;炭[I]  然后您可以将字符分配到字符串中。