C 十进制到二进制转换不起作用
该行:C 十进制到二进制转换不起作用,c,C,该行: ./dec2bin "-d" "23" "-b" 将fractionfactor设置为0,因为变量定义为整数。尝试使用浮点或双精度 同样地 long int fractionfactor = .1; 存储整数值,因此无需使用wholenum 而不是 long int dec = myatoi(decimal); 而且,在当今的优化编译器中,两个版本可能会生成相同的目标代码。一般来说,尤其是当代码不工作时,更倾向于可读性而不是优化 像这样简单地将代码翻译成英语的注释是不必要的,除
./dec2bin "-d" "23" "-b"
将fractionfactor
设置为0
,因为变量定义为整数。尝试使用浮点
或双精度
同样地
long int fractionfactor = .1;
存储整数值,因此无需使用wholenum
而不是
long int dec = myatoi(decimal);
而且,在当今的优化编译器中,两个版本可能会生成相同的目标代码。一般来说,尤其是当代码不工作时,更倾向于可读性而不是优化
像这样简单地将代码翻译成英语的注释是不必要的,除非您以不寻常的方式使用该语言。你可以假设读者熟悉这门语言;相反,解释你的推理更有帮助
fraction *= 2; // times by two first
字符串比较函数的结果应为负数,以便继续。否则将打印无效参数。因为strcmp在字符串相等时返回“0”
在“decimal2binary”函数中,为输入参数“decimal”分配一个新的内存块
if(!strcmp(argv[3] , "-b"))
if(!strcmp(argv[3] , "-d"))
这实际上会覆盖您的输入参数数据
decimal = malloc(sizeof(char) * 32);
上面的代码行将一个新的内存块分配给十进制
,它将不再指向输入数据。然后排队
void decimal2binary(char *decimal, int *binary) {
decimal = malloc(sizeof(char) * 32);
...
}
将新分配的内存(随机值)分配给dec
因此,请删除该行
long int dec = myatoi(decimal);
你会得到正确的答案。另一个编码技巧:代替写作
decimal = malloc(sizeof(char) * 32);
您可以重构嵌套的if
块,使它们更简单、更容易理解。一般来说,最好尽早检查错误情况,将错误检查与核心处理分开,并尽可能详细地解释错误,以便用户知道如何纠正错误
如果您这样做,也可能更容易认识到两个原始条件都应该被否定:
if (strcmp(argv[1], "-d")) {
if (strcmp(argv[3], "-b")) {
decimal2binary(argv[2], &datai);
printf("output is : %d" , datai);
} else {
printf("invalid parameter");
}
} else {
printf("invalid parameter");
}
以这种方式调用:
/dec2bin-d23-b
而不是使用双引号shell将去掉引号,因此省略它们不会有什么区别。好吧,哇,我尝试过了,但得到了109519692
long int dec = myatoi(decimal);
decimal = malloc(sizeof(char) * 32);
if (strcmp(argv[1], "-d")) {
if (strcmp(argv[3], "-b")) {
decimal2binary(argv[2], &datai);
printf("output is : %d" , datai);
} else {
printf("invalid parameter");
}
} else {
printf("invalid parameter");
}
if (strcmp(argv[1], "-d") != 0) {
printf("Error: first parameter must be -d\n");
else if (strcmp(argv[3], "-b") != 0) {
printf("Error: third parameter must be -b\n");
} else {
decimal2binary(argv[2], &datai);
printf("Output is: %d\n" , datai);
}