我不能让这个工作。我明白了……那是十进制的 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;
}
你有两个错误:
else if (num == 1)
您正在使用%c
in scanf
,因此您将值作为字符读取。所以你必须检查num == '1'
,因为1 != '1'
。有关字符数值的更多信息,请参阅ASCII 表。
第二个错误是
printf("That is %i in decimal", &result);
在这里你必须通过result
,但你传递的&result
是一个指向int
. &result
是变量的地址result
。还要向 中添加一个换行符printf
:
printf("That is %i in decimal\n", result);
也没有理由来声明result
,power
并num
为全局变量,你为什么这样做?只需在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;
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句