我想用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);
}
发布于 2019-06-24 08:33:29
问题是您正在将char类型与int类型进行比较。
虽然从技术上讲,字符是一个整数,但它是基于ASCII values的。这意味着,当您在char数组编号的索引i处获取char时,您将返回该char的可打印版本。
例如:
字符'0‘= int 48
字符'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和控制字符相关。
如果您想压缩代码,以便更容易地看到实际发生了什么,请查看三元运算符。
https://stackoverflow.com/questions/56728615
复制相似问题