#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
答案 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;
}