二进制到十进制...输出错误

时间:2015-12-18 07:38:27

标签: c pointers binary output decimal

#include<stdio.h>
#include<string.h>
#include<math.h>
int main()
{          
    char *bin=malloc(sizeof(char)*100);
    int i=0,p=0,dec=0,g;

    printf("\nenter the binary number\n");
    gets(bin);
    i=strlen(bin)-1;
    while(*(bin+p)!=NULL){

        if(*(bin+p)=='1'){
            g=pow(2,(i-p));
            dec=dec+g;
        }
        p++;
    }
    printf("\n%d",dec);

return 0;
}

以上程序应将任意位二进制数转换为十进制数。

示例输入:

10011

预期产出:

19

实际输出:

1

4 个答案:

答案 0 :(得分:1)

除了gets已经指出的问题之外,您的代码中存在一些}不匹配。但逻辑错过了i的价值。在您的代码中,您从p中减去i,始终为0.尝试在循环之前设置i的值,如下所示 -
i = strlen(bin) - 1;

另外,在代码中添加一些错误检查。

答案 1 :(得分:1)

首先:打开编译器警告。编译代码时,我收到了几个警告和编译器错误。

也就是说,使用pow功能时出错。您可以通过将i设置为正确的值来解决此问题:

gets(bin);
i = strlen(bin) - 1;

如果输入正确(只有1和0,不超过int中的位数),这将使代码工作。

您还应该将gets替换为fgets

fgets(bin, 100, stdin);

请注意,如果字符串适合,fget s也会将换行符放在字符串中,因此您需要将其删除。

修正了我在使用gcc -Wall进行编译时收到的警告后,代码看起来像这样(我没有把gets更改为fgets):

#include<stdio.h>
#include<string.h>
#include<math.h>
#include<stdlib.h>

int main()
{
  char *bin=malloc(sizeof(char)*100);
  int i=0,p=0,dec=0,g;

  printf("\nenter the binary number\n");
  gets(bin);
  i = strlen(bin) - 1;

  while(*(bin+p)!='\0'){
    if(*(bin+p)=='1'){
      g=pow(2,(i-p));
      dec=dec+g;
    }
    p++;
  }
  printf("\n%d",dec);

  return 0;
}

答案 2 :(得分:1)

希望这能解决你的问题。

#include <stdio.h>
#include <string.h>
#include <math.h>
#include <stdlib.h>

int main()
{          
char *bin = (char *) malloc(sizeof(char)*100);
int i=0, p =0,dec=0,g;

printf("\nenter the binary number\n");
gets(bin);
i = strlen(bin);
i = i - 1;
while(*(bin+p)!='\0'){

    if((*(bin+p))=='1'){
        g=pow(2,(i-p));
        dec=dec+g;
    }
    p++;
}
printf("\n%d",dec);
return 0;
}

答案 3 :(得分:-1)

人们已经指出了各种问题。除此之外,您可能希望按如下方式更改程序。另外请记住,仅仅为了演示,我&#39;我在程序中设置bin的值。您仍然希望获取bin的用户输入。

#include<stdio.h>
#include<stdlib.h>
#include<string.h>
#include<math.h>
int main()
{

char *bin=(char *)malloc(sizeof(char)*100);
int i=0,p=0,dec=0,g;

printf("\nenter the binary number\n");
//gets(bin);
bin = "1011";
int len = strlen(bin);
i = len;

while(i > 0)
{
    if(*(bin+p)=='1')
    {
        g=pow(2,(len-p-1));
        dec=dec+g;
    }
    p++;
    i--;
}
printf("\n%d",dec);

return 0;
}