我想要一个用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);
}
答案 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和控制字符相关的位值的好时机。
如果要压缩代码以便更轻松地了解实际情况,请查看三元运算符。