isdigit(c) - 利用 char 与 int 进行输入验证
检查代码时,旨在将用户输入验证为数字,问题出现了:输入变量类型应该是 - char 还是 int?
理解这个困境需要深入研究 C 中 isdigit 函数的复杂性。与它的名字相反,isdigit 需要一个整数参数,引起对 char 输入兼容性的担忧。
解释在于 C 的历史,特别是 getchar(),它以整数形式检索字符以容纳字符代码和错误代码(表示 EOF 的负值)。这种设计会产生与 char 的兼容性问题,根据编译器的不同,char 可以是有符号的,也可以是无符号的。
有符号的 char 提出了一个挑战,因为负值与 EOF 重叠,可能会导致错误。因此,isdigit 和相关函数需要将输入视为无符号字符以确保积极性。
为了确保兼容性,请按如下方式修改代码:
<code class="c">if(isdigit((unsigned char)c))</code>
此外,验证这一点至关重要输入流在使用 c 之前是有效的,因为关闭的流可能会使其未初始化。
以上是在 C 中我应该使用 char 还是 int 进行输入验证?的详细内容。更多信息请关注PHP中文网其他相关文章!