【问题标题】:I dont know what is wrong with this program. it's supposed to convert binary to decimal in c [closed]我不知道这个程序有什么问题。它应该在c中将二进制转换为十进制[关闭]
【发布时间】:2013-10-05 00:22:16
【问题描述】:

这个程序应该将二进制数转换为十进制数。我是 C 新手,我对 C 编码不是很有信心。尝试并编写了这个程序,但运行不正常。而且我不知道这里出了什么问题。需要一些帮助来完成这个程序。 谢谢

binaryToDecimal(char str[]) {
    for(int i = strlen(str)-i; i>=0; i--) {
        if(str[i] == 48 || str[i] == 49) {
            int tmp = pow(2, counter);
            int sum= str[i]*tmp;
            counter++;
            answer += sum;
        } else if(str[i]>49 || str[i]<48) {
            printf("error");
        }
    }
    printf("%d", &answer);
}

【问题讨论】:

  • 这可能会有所帮助:stackoverflow.com/questions/9852917/…
  • 答案的类型是什么?
  • 请说明无法正常运行。你给它什么输入?你期望什么输出?你实际得到了什么输出?
  • “无法正常运行”不是一个有用的问题描述。 “运行不正常”到底是什么意思?哪方面不合适?如果您希望我们为您提供帮助,您需要具体说明您遇到的问题。毕竟,您知道它是什么,否则您不会在这里发帖寻求帮助。为什么不向我们解释一下,让我们也知道呢?

标签: c string


【解决方案1】:

这句话没有意义:

int i = strlen(str)-i;

i 尚未初始化,但您在表达式中使用它!

我相信你的意思是:

int i = strlen(str)-1;   // ONE ... not I

【讨论】:

  • answer 未初始化。
【解决方案2】:

str[i] 是一个字符,'1' 或 '0' 如你所见,它等于 48 和 49 作为整数。所以你想将它们转换为 1 和 0 它们进行乘法运算。

sum = (str[i] - 48) * tmp;

【讨论】:

    【解决方案3】:

    假设所有变量都已初始化为合理值并且str 保存输入。以下代码应该可以工作,尽管它不是特别有效。 您可以使用'0''1' 而不是更晦涩的4849

    for (i = strlen(str)-1, j = 0; i >= 0; --i, ++j) { 
    
       if (str[i] != '0' && str[i] != '1') {
           printf("ERROR: unxepected input\n");
           exit(EXIT_FAILURE);
       }
    
       if (str[i] == '1')
           sum += pow(2, j);
    }
    

    打印结果时提供值而不是地址,例如

    printf("%d\n", sum);  // (!) not &sum
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-08
      • 1970-01-01
      • 2019-12-16
      • 1970-01-01
      • 2018-04-02
      • 2021-02-16
      • 1970-01-01
      • 2021-01-29
      相关资源
      最近更新 更多