你刚刚写了一个二进制到十进制转换器

卡思0n

我不能让这个工作。我明白了……那是十进制的 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)

您正在使用%cin 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);

也没有理由来声明resultpowernum为全局变量,你为什么这样做?只需在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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章