【发布时间】:2021-02-23 13:42:00
【问题描述】:
安全输入比我想象的要难。我环顾四周,找到了this,但它是从 2011 年开始的,从那时起情况可能已经发生了变化。
我正在寻找可以处理字符串输入和单字符输入的东西。例如:
Hello, what's your name?
My name is: _
Are you sure?
[Y] Yes, hello
[N] No, goodbye
_
这是我现在的做法:
char input[16];
fgets(input, 16, stdin);
char input = getchar();
我的问题一直是用户可能输入任意长的输入或者无效的输入。如何安全地读取输入并确保以后的输入不会被打扰?
寻找适用于 C 和 Linux/Windows 的解决方案。
感谢您的宝贵时间。
【问题讨论】:
-
... 之后,刷新标准输入... - 不要想你是否可以
fflush(stdin)。它会调用 UB。 -
在 C 中创建动态字符串非常容易。在 C++ 中,您可以使用
std:string foo; std::cin >> foo。如果你愿意,我可以写 C 版本作为答案? -
@ImportAccelerate 等待,直到 OP 决定这个问题是关于什么语言的。
-
@RohanBari 是的,我知道我不能这样刷新
stdin,我的目的是让未来的输入不会变得无聊。对我来说,一个常见的经验是忘记输入缓冲区中仍然存在换行符,从而阻碍了下一次读取。
标签: c validation input