isdigit() 函数是否用于 Char 或 Int 输入?
在提供的代码片段中,if 条件使用 isdigit() 来判断输入的字符是否为数字。然而,关于适当的输入变量类型的问题出现了:char或int。
深入研究C的起源
要理解int输入的选择,我们必须深入研究isdigit() 起源于 C。该函数设计为与 getchar() 一起使用,后者将字符读取为 int 以提供字符和错误代码。负值表示错误,而正值表示字符代码。
Signed 与 Unsigned Char
此设置呈现出 char 的困境,char 可以是有符号的,也可以是无符号的,具体取决于关于实施。大多数系统默认采用signed char,这可能会与getchar()的错误代码约定(负值)发生冲突。
isdigit()的类型转换
为了解决这个问题,isdigit() 需要一个表示无符号字符的输入 int。因此,正确的 if 条件应该是:
if(isdigit((unsigned char)c))
其他注意事项
除了 char-int 难题之外,在访问 c 之前检查流关闭至关重要。这确保了流仍然有效并且 c 的值已被正确分配。
摘要
虽然初始代码可能不会出现错误,但它忽略了复杂性char 的符号性和 isdigit() 的输入要求。通过将输入转换为无符号字符,我们遵守函数的约定并避免潜在的未定义行为。
以上是`isdigit()` 应该采用 `char` 还是 `int` 输入?的详细内容。更多信息请关注PHP中文网其他相关文章!