我期待单个数字整数输入,并且如果不是这种情况,则已经有错误处理。通过简单地减去输入字符是否是任何潜在的无法预料的后果是' 0' 0转换"转换"它变成一个整数?
我不是在寻找有关可读性的观点或者更常用的观点(虽然它们不会作为答案的延伸而受到伤害),但仅仅是它是否是一个问题。可靠的转换形式。如果我要求用户输入0到9之间的整数,是否有任何情况可以输入input = input-'0'
应该处理,但不是
答案 0 :(得分:8)
这是安全的,并且由C语言保证。在当前版本C11中,相关文本是5.2.1字符集,¶3:
在源和执行基本字符集中,上述十进制数字列表中0之后的每个字符的值应大于前一个值的值。
至于它是否是“不良做法”,这是一个意见问题,但我会说不。它既是惯用的(C程序员常用和理解),也没有任何混淆和低效的替代方案。例如,读C的人不希望看到这个写为switch
语句有10个案例,或者设置一个虚拟的单字符串来传递给atoi
。
答案 1 :(得分:5)
字符的顺序是编码/系统相关的,因此通常不能依赖于特定的顺序。但是,对于任何系统中的数字序列0..9
,保证它以0
开头并继续9
而没有任何中间字符。因此input = input - '0'
是完美的,只要您保证input
包含数字(例如,使用isdigit
)。