Sel*_*yme 2 c input conventions digits
我期待一个单位整数输入,并且如果不是这样的话,已经有错误处理.通过简单地将输入字符减去"0"以将其"转换"为整数,是否有任何潜在的无法预料的后果?
我不是在寻找关于可读性的观点或者更常用的观点(尽管它们不会作为答案的延伸而受到伤害),而只是它是否是一种可靠的转换形式.如果我问用户输入0到9之间的整数,在那里,其中有可以输入任何情况下input = input-'0' 要处理,但不?
这是安全的,并由C语言保证.在当前版本C11中,相关文本是5.2.1字符集,3:
在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应比前一个值大1.
至于它是否是"不良做法",这是一个意见问题,但我会说不.它既是惯用的(C程序员常用和理解),也没有任何混淆和低效的替代方案.例如,没有人阅读C会想要将其写成switch10个案例的语句,或者设置一个虚拟的单字符串来传递给它atoi.
字符的顺序是编码/系统相关的,因此通常不能依赖于特定的顺序.0..9但是,对于任何系统中的数字序列,保证它始于0并继续9没有任何中间字符.input = input - '0'只要你保证input包含一个数字(例如通过使用isdigit),那么就是完美的.