【发布时间】:2012-12-11 16:53:40
【问题描述】:
在广泛搜索将整数转换为视觉等效字符串的函数后,我一无所获,我决定自己编写。
函数“ascii”接受三个参数:要转换的整数、保存转换后整数的字符串和一个保留为 0 的计数器。
void ascii(int c, char str[], int k) {
if (c <= 9) {
str[k] = c + '0';
}
else if (c >= 10) {
str[k] = c / 10 + '0';
ascii(c % 10, str, k + 1);
}
}
用个位数的数字测试这个函数并没有什么意外的结果,但是在更大的数字上,事情开始变得一团糟。 76变成“761”,765变成“|51”,7658变成“-81”。数字包含的数字越多,我对结果字符串的意义就越小。什么给了?
【问题讨论】:
-
专业提示:使用
sprintf和%d说明符(更好的是,C99 中的snprintf或者如果您的编译器支持它)。 -
为什么不能使用 sprintf?
-
不是答案,但将
+ 48替换为+'0'会产生更易读的代码 -
...而且更便携(至少在理论上)。
-
如何输出?你会在末尾添加
\0吗?