Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/google-apps-script/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 十进制到二进制转换不起作用_C - Fatal编程技术网

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);
}