除其他事项外,我的程序应该将任何值小于32且大于126的字符存储为period(。)。然后应该将其打印出来。
例如,如果将换行符传递给我的打印功能,则应将其存储为句点,并在其位置打印出句点。
(我不允许使用printf,只有系统调用“ write”)
这是我代码的一部分,它使用长度为8的字符数组(称为asci)并将其字符编码为需要打印的内容:
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;
}
不打印任何句点。例如,对于换行符,将打印文字换行符,而不是句点。
答案 0 :(得分:0)
一个愚蠢的错误!
存在逻辑错误,而不是:
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] = '.';
}
第一个||
需要替换为&&
。