
面试高老师为您分享以下优质知识
在C语言中输入二进制字符串可以通过以下两种常见方法实现:
一、使用字符数组读取输入
通过`scanf`函数读取用户输入的字符数组,并逐位判断是否为二进制字符('0'或'1')。
示例代码:
```c
include
int main() {
char str;
printf("请输入二进制数: ");
scanf("%99s", str); // 限制输入长度为99,留1位给终止符
int n = 0;
for (int i = 0; str[i] != '0'; i++) {
if (str[i] == '1' || str[i] == '0') {
n = n * 2 + (str[i] - '0');
} else {
printf("输入的不是二进制数
");
return 1;
}
}
printf("对应的十进制数为: %d
", n);
return 0;
}
```
说明:
1. 使用`scanf("%99s", str)`读取二进制字符串,避免缓冲区溢出。
2. 遍历字符串,将二进制位转换为十进制并累加。
二、使用`scanf`的格式说明符
C语言标准库提供了`%b`或`%B`格式说明符,可直接读取二进制数(0和1)。
示例代码:
```c
include
int main() {
unsigned int binaryNum;
printf("请输入二进制数: ");
scanf("%b", &binaryNum); // 读取二进制数
printf("对应的十进制数为: %u
", binaryNum);
return 0;
}
```
注意事项:
输入的二进制数应为8的倍数,否则`scanf`可能无法正确解析。
该方法仅适用于固定长度的二进制数(如8位、16位等),不支持动态长度输入。
三、其他方法(扩展)
如`strtol`可配合`%b`使用,但需注意输入格式限制。
通过位移和掩码操作将整数转换为二进制字符串,适用于特定场景。
示例(使用`sprintf`格式化输出):
```c
include
int main() {
unsigned int num = 26;
char binaryStr = {0}; // 8位二进制数
sprintf(binaryStr, "%b", num);
printf("十进制数 %u 的二进制表示为: %s
", num, binaryStr);
return 0;
}
```
以上方法可根据具体需求选择,若需动态输入且长度不固定,推荐使用字符数组读取法;若输入长度固定且为8的倍数,可用`scanf("%b")`简化操作。