c - C:使用 unistd 写入打印句点(。)
问题描述
除其他外,我的程序应该将任何值小于 32 且大于 126 的字符存储为句点 (.)。然后应该打印出这段时间。
例如,如果将换行符传递给我的打印函数,它应该将其存储为句点,并在其位置打印出句点。
(我不允许使用 printf,只能使用系统调用“write”)
这是我的代码的一部分,它采用称为 asci 的长度为 8 的字符数组并将其字符编码为需要打印的内容:
unsigned char asci3[8];
for (int k = 0; k < 8; k++) {
if ((asci[k] >= 32) || (asci[k] <= 126)) {
asci3[k] = asci[k];
}
else if ((asci[k] < 32) || (asci[k] > 126)) {
asci3[k] = '.';
}
}
这就是我打印 asci3 的方式:
if (write(1, asci3, 8) > 8) {
return -1;
}
没有打印句点。例如,对于换行符,将打印文字换行符,而不是句点。
解决方案
一个愚蠢的错误!
出现逻辑错误,而不是:
if ((asci[k] >= 32) || (asci[k] <= 126)) {
asci3[k] = asci[k];
}
else if ((asci[k] < 32) || (asci[k] > 126)) {
asci3[k] = '.';
}
它应该是:
if ((asci[k] >= 32) && (asci[k] <= 126)) {
asci3[k] = asci[k];
}
else if ((asci[k] < 32) || (asci[k] > 126)) {
asci3[k] = '.';
}
第一个||
需要替换为&&
.
推荐阅读
- r - ggplot2 不会在世界地图上绘制一些数据组合
- java - mDNS 注册服务在 Windows 上并不总是可发现
- logging - 关于 ELK 中的时间戳的问题?
- php - php -v 停留在 7.1.33 并没有切换到 8.0.9
- python - 保存包含自定义层的复合模型会导致错误 - None 具有 NoneType,但应为以下之一:字节、unicode
- android-studio - haxm 安装成功但仍然无法运行应用程序
- azure - Azure Pipelines - 使用资源管道触发当前管道时无法使用变量组
- amazon-web-services - 使用 kube-proxy 连接到由上游服务公开的 AWS 托管 redis 缓存
- c# - InvalidOperationException:尝试激活“Controller”时无法解析“UnitOfWork”类型的服务
- ios - 有没有办法在不结束连接的情况下更改 websocket 的参数?