程序打印全1?

时间:2019-06-24 00:19:53

标签: c

我想要一个用1和0填充的数字并将其转换为布尔值。但是,当我运行代码时,它打印出的全为1。 My code

我几乎完成了所有代码,我知道我可能会丢失一部分。

unsigned int booltoint(char number[], int length)
{
  int i;
  bool check;
  for(i = 0; i < length; i++)
{
    if(number[i] == 0)
    {
      check = false;
      printf("%d\n", check);
    }
    else
    {
      check = true;
      printf("%d\n", check);
    }
   }
  return check;
}


int main()
{
  int length;
  char number[] = "11001100";


  length = strlen(number);
  booltoint(number, length);

}

1 个答案:

答案 0 :(得分:0)

问题在于您正在比较char类型和int类型。

虽然char从技术上讲是int,但它基于ASCII values。这意味着,当您在char数组编号的索引i处获得char时,您将返回该char的可打印版本。

例如:
char'0'=整数48
char'1'=整数49
(您可以在链接的图表中看到这些值。)

您的检查将始终返回false,因为没有ASCII值为0(期望为NULL,但这是另一回事)。

更正相等性检查的最简单(也是最易读/可维护)的方法是这样的:

if (number[i] == '0')

if (number[i] == '1')

要查看不同数字的ASCII表示形式,可以运行以下命令:

int  i;

for (i=32; i<127; i++) {
    printf("%d: '%c'\n", i, i);
}

这也是学习与ASCII和控制字符相关的位值的好时机。

如果要压缩代码以便更轻松地了解实际情况,请查看三元运算符。