C:打印周期(。),带有未写入的写入

问题描述 投票:0回答:1

除此之外,我的程序应该存储值小于32且大于126的任何字符作为句点(。)。然后应该打印出这个时期。

例如,如果将换行符传递给我的打印函数,则应将其存储为句点,并在其位置打印出句点。

(我不允许使用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;                  
}   

没有印刷期间。例如,对于换行符,正在打印文字换行符,而不是句点。

c hexdump unistd.h
1个回答
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] = '.';                         
} 

第一个||需要用&&替换。

© www.soinside.com 2019 - 2024. All rights reserved.