C 你刚刚写了一个二进制到十进制的转换器
我不能让它工作。我明白了。。。十进制是6295636 该程序只是将四位二进制转换为十进制解释。我认为我的逻辑是正确的,但我说不出来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
#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
,而不是变量的地址非常感谢…我迫不及待地想让我的理解更好,这样我就可以贡献你的爱了