Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/72.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,我不能让它工作。我明白了。。。十进制是6295636 该程序只是将四位二进制转换为十进制解释。我认为我的逻辑是正确的,但我说不出来 #include <stdio.h> int result = 0; int power2 = 8; char num; int main(){ printf("Enter FOUR 1's and/or 0's followed by a '*'.\n"); scanf("%c", &num); while

我不能让它工作。我明白了。。。十进制是6295636 该程序只是将四位二进制转换为十进制解释。我认为我的逻辑是正确的,但我说不出来

#include <stdio.h>

int result = 0;

int power2 = 8;

char num;

int main(){

    printf("Enter FOUR 1's and/or 0's followed by a '*'.\n");
    scanf("%c", &num);

    while (num != '*'){
        if (num == ' '){
            printf("\n");
        } 
        else if (num == 1){
            result = result + power2;
        }
        power2 = power2 / 2;

        scanf("%c", &num);
    }
    printf("That is %i in decimal", &result);
    return 0;
}
#包括
int结果=0;
int-power2=8;
字符数;
int main(){
printf(“输入四个1和/或0,后跟一个“*”。\n”);
scanf(“%c”和&num);
而(num!='*'){
如果(num=''){
printf(“\n”);
} 
else if(num==1){
结果=结果+功率2;
}
power2=power2/2;
scanf(“%c”和&num);
}
printf(“即十进制的%i”,&result);
返回0;
}
您有两个错误:

else if (num == 1)
您正在
scanf
中使用
%c
,因此您正在以字符形式读取该值。所以 您必须检查
num==“1”
,因为
1!='1'
。有关字符数值的详细信息,请参见

第二个错误是

printf("That is %i in decimal", &result);
这里您必须传递
结果
,但您传递的是
结果
,它是一个指针 到
int
&result
是变量
result
的地址。还要添加一个换行符 到
printf

printf("That is %i in decimal\n", result);
此外,没有理由将
结果
功率
数值
声明为全局 变量,你为什么这么做?只需在
main
功能

检查
scanf
的返回值以查看是否 成功读取并转换用户的值,这将使 程序更加健壮。您还应该检查用户是否输入了内容 与
'1'
'0'
不同

因此,更正后的代码:

#include <stdio.h>

int main(){
    int result = 0;
    int power2 = 8;
    char num;

    printf("Enter FOUR 1's and/or 0's followed by a '*'.\n");
    int ret = scanf("%c", &num);

    if(ret != 1)
    {
        fprintf(stderr, "Could not read from user\n");
        return 1;
    }

    while (num != '*') {
        if (num == ' '){
            printf("\n");
        } else if(num == '1' || num == '0') {
            // num - '0'  would give you either 1 or 0
            result = result + (num - '0') * power2;
            power2 = power2 / 2;
        } else {
            fprintf(stderr, "Invalid input '%c', ignoring\n", num);
        }

        ret = scanf("%c", &num);
        if(ret != 1)
        {
            fprintf(stderr, "Could not read from user\n");
            return 1;
        }
    }

    printf("That is %i in decimal\n", result);
    return 0;
}
#包括
int main(){
int结果=0;
int-power2=8;
字符数;
printf(“输入四个1和/或0,后跟一个“*”。\n”);
int-ret=scanf(“%c”和&num);
如果(ret!=1)
{
fprintf(stderr,“无法从用户读取\n”);
返回1;
}
而(num!='*'){
如果(num=''){
printf(“\n”);
}else if(num==“1”| | num==“0”){
//num-“0”将为您提供1或0
结果=结果+(数值-'0')*power2;
power2=power2/2;
}否则{
fprintf(stderr,“无效输入'%c',忽略\n',num);
}
ret=scanf(“%c”和&num);
如果(ret!=1)
{
fprintf(stderr,“无法从用户读取\n”);
返回1;
}
}
printf(“即十进制的%i\n”,结果);
返回0;
}

printf(“即十进制的%i,&result”)应为:
printf(“即十进制的%i”,结果)。你想打印一个
int
,而不是变量的地址非常感谢…我迫不及待地想让我的理解更好,这样我就可以贡献你的爱了