【发布时间】:2015-05-01 07:41:02
【问题描述】:
我正在尝试创建一个代码,将小数转换为 2 到 16 之间的任何基数。但我不知道如何在我的字符串中写入新值。
void base_conversion(char s[], int x, int b) {
int j, y;
j = 0;
// your code here
while(b > 1 && b < 17) {
if (x < 0) {
x = (-x);
}else if(x == 0) {
s[j] = '\0';
}
x = (x/b);
while(x > 0) {
y = (x%b);
if (y == 10) {
s[j] = 'A';
}else if(y == 11) {
s[j] = 'B';
}else if(y == 12) {
s[j] = 'C';
}else if(y == 13) {
s[j] = 'D';
}else if(y == 14) {
s[j] = 'E';
}else if(y == 15) {
s[j] = 'F';
}else{
s[j] = y;
}
}
}j = j + 1;
}
【问题讨论】:
-
你对你的问题做了哪些研究?
-
首先你在任何循环之外增加
j,所以你总是会覆盖s[0]。其次,您没有在内部循环中修改x和b,所以如果x不为零,那么您就有一个无限循环。第三,您能否详细说明您的问题(除了我提到的问题)?对于某些输入,预期和实际输出是多少? -
您不需要
while()循环来测试基础b:基础有效或无效 - 在函数入口处。 -
while (b > 1 && b < 17) { /* code that does not change b and does not have a break statement */ }是一个无限循环。 -
另外,请学习如何使用调试器。在调试器中逐行执行代码会使我提到的所有问题都非常明显。
标签: c string loops while-loop base-conversion