C: периоды печати (.) С записью в формате unistd - PullRequest
0 голосов
/ 01 марта 2019

Помимо прочего, моя программа должна хранить любой символ со значением меньше 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;                  
}   

Периоды не печатаются.Например, для символа новой строки печатается буквальный символ новой строки вместо точки.

1 Ответ

0 голосов
/ 01 марта 2019

Глупая ошибка!

Произошла логическая ошибка, вместо:

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] = '.';                         
} 

Первый || необходимо заменить на &&.

...