Online Compiler C

#include <stdio.h> unsigned int convert_to_base(int n, int p) { unsigned int cymma = 0; while ( n >= 0) { int octatok, o10 = 1; octatok = n%p; cymma = octatok * o10; n /= p; o10 *= 10; } return cymma; } int main() { int a, b; scanf ("%ud%ud" , &a,&b ); printf("%ud%ud", convert_to_base(a,b)); return 0; }
这段代码试图将一个十进制数转换为指定进制(如二进制、八进制等),并以十进制数字的形式表示结果。例如,将十进制5转换为二进制,期望得到101(但实际以整数101返回)。代码中存在多个问题。

- 在`convert_to_base`函数中,变量`o10`每次循环都被重置为1,导致无法正确累加每一位的权重。应该将`o10`的初始化移到循环外部。
- 循环条件`while ( n >= 0)`会导致无限循环,因为当`n`变为0后,循环仍会继续。应该改为`while (n > 0)`。
- `main`函数中的`scanf`和`printf`格式说明符`%ud`不正确,`%u`用于无符号整数,但`a`和`b`是`int`类型,且`%ud`不是标准格式。应该使用`%d`读取整数。
- `printf`只传递了一个参数,但格式字符串中有两个`%ud`,这会导致未定义行为。应该只打印转换结果。