Π§ΠΈΡ‚Π°ΠΉΡ‚Π΅ ΠΊΠ½ΠΈΠ³ΠΈ ΠΎΠ½Π»Π°ΠΉΠ½ Π½Π° Bookidrom.ru! БСсплатныС ΠΊΠ½ΠΈΠ³ΠΈ Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΊΠ»ΠΈΠΊΠ΅

Π§ΠΈΡ‚Π°Ρ‚ΡŒ ΠΎΠ½Π»Π°ΠΉΠ½ Β«UNIX β€” ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½Π°Ρ срСда программирования». Π‘Ρ‚Ρ€Π°Π½ΠΈΡ†Π° 75

Автор ΠšΠ΅Ρ€Π½ΠΈΠ³Π°Π½ Π‘Ρ€Π°ΠΉΠ°Π½ Уилсон

6.1 Π‘Ρ‚Π°Π½Π΄Π°Ρ€Ρ‚Π½Ρ‹Π΅ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ: ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ°

vis

МногиС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ Ρ‡ΠΈΡ‚Π°ΡŽΡ‚ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΈΠ· ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΈ ΠΏΠΈΡˆΡƒΡ‚ Π² ΠΎΠ΄ΠΈΠ½ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ: для Ρ‚Π°ΠΊΠΈΡ… ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ ΠΏΠΎΠ»Π½ΠΎΡΡ‚ΡŒΡŽ подходят Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π°, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‰ΠΈΠ΅ лишь стандартныС Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊΠΈ, ΠΈ для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ Π½Π°Ρ‡Π°Ρ‚ΡŒ Ρ€Π°Π±ΠΎΡ‚Ρƒ, этого ΠΏΠΎΡ‡Ρ‚ΠΈ всСгда достаточно.

ΠŸΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ ΠΈΠ·Π»ΠΎΠΆΠ΅Π½Π½ΠΎΠ΅ с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

vis
, которая ΠΊΠΎΠΏΠΈΡ€ΡƒΠ΅Ρ‚ свой стандартный Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ Π² стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ, изобраТая ΠΏΡ€ΠΈ этом всС Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы Π² Π²ΠΈΠ΄Π΅
\nnn
, Π³Π΄Π΅
nnn
β€” Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½ΠΎΠ΅ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ символа.
Vis
ΠΏΠΎΠ»Π΅Π·Π½Π° для обнаруТСния "посторонних" ΠΈΠ»ΠΈ Π½Π΅ΠΆΠ΅Π»Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Ρ… символов, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΏΠΎΠΏΠ°ΡΡ‚ΡŒ Π² Ρ„Π°ΠΉΠ»Ρ‹. НапримСр,
vis
Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ‡Π°Ρ‚Π°Ρ‚ΡŒ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ символ "шаг Π½Π°Π·Π°Π΄" ΠΊΠ°ΠΊ \010, Ρ‡Ρ‚ΠΎ являСтся Π΅Π³ΠΎ Π²ΠΎΡΡŒΠΌΠ΅Ρ€ΠΈΡ‡Π½Ρ‹ΠΌ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ΠΌ:

$ cat x abc

$ vis < x

abc\010\010\010 ___

$

Π§Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ нСсколько Ρ„Π°ΠΉΠ»ΠΎΠ² с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ этой элСмСнтарной вСрсии

vis
, Π²Ρ‹ ΠΌΠΎΠΆΠ΅Ρ‚Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
cat
для сбора Ρ„Π°ΠΉΠ»ΠΎΠ²

$ cat Ρ„Π°ΠΉΠ»1 Ρ„Π°ΠΉΠ»2 ... | vis

...

$ cat Ρ„Π°ΠΉΠ»1 Ρ„Π°ΠΉΠ»2 ... | vis | grep '\\'

...

ΠΈ ΠΈΠ·Π±Π΅ΠΆΠ°Ρ‚ΡŒ Ρ‚Π΅ΠΌ самым выяснСния способа доступа ΠΊ Ρ„Π°ΠΉΠ»Π°ΠΌ ΠΈΠ· ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹.

ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, ΠΌΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚Ρƒ слСдуСт Π²Ρ‹ΠΏΠΎΠ»Π½ΠΈΡ‚ΡŒ с ΠΏΡ€ΠΈΠ²Π»Π΅Ρ‡Π΅Π½ΠΈΠ΅ΠΌ

sed
, ΠΏΠΎΡΠΊΠΎΠ»ΡŒΠΊΡƒ ΠΊΠΎΠΌΠ°Π½Π΄Π°
'1'
Π²Ρ‹Π΄Π°Π΅Ρ‚ Π½Π° экран Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅ символы Π² наглядном Π²ΠΈΠ΄Π΅:

$ sed -n 1 x

abc←←←___

$

Π Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹

sed
, вСроятно, Π²Π°ΠΌ покаТСтся яснСС, Ρ‡Π΅ΠΌ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚ выполнСния
vis
. Но ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅
sed
ΠΊ нСтСкстовым Ρ„Π°ΠΉΠ»Π°ΠΌ бСссмыслСнно:

$ sed -n 1 /usr/you/bin

$
НичСго Π² ΠΎΡ‚Π²Π΅Ρ‚!

(Π’Π°ΠΊ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΎΡΡŒ Π½Π° PDP-11; Π² ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· систСм для VAX

sed
Π°Π²Π°Ρ€ΠΈΠΉΠ½ΠΎ Π·Π°Π²Π΅Ρ€ΡˆΠΈΠ»Π°ΡΡŒ, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΏΠΎΡ‚ΠΎΠΌΡƒ, Ρ‡Ρ‚ΠΎ Π²Π²ΠΎΠ΄ Π±Ρ‹Π» воспринят ΠΊΠ°ΠΊ ΠΎΡ‡Π΅Π½ΡŒ длинная тСкстовая строка.) Π’Π°ΠΊΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ,
sed
Π½Π°ΠΌ Π½Π΅ ΠΏΠΎΠ΄Ρ…ΠΎΠ΄ΠΈΡ‚, ΠΈ ΠΌΡ‹ Π²Ρ‹Π½ΡƒΠΆΠ΄Π΅Π½Ρ‹ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½ΠΎΠ²ΡƒΡŽ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ.

ΠŸΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠΈΠ΅ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ Π²Π²ΠΎΠ΄Π° ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π°

getchar
ΠΈ
putchar
. ΠŸΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ Π²Ρ‹Π·ΠΎΠ²Π΅
getchar
появляСтся ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ символ ΠΈΠ· стандартного Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ°, ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌΡƒ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ поставлСн Π² соотвСтствиС Ρ„Π°ΠΉΠ», ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ€ ΠΈΠ»ΠΈ Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π» (послСднСС принимаСтся ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ). ΠŸΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ° "Π½Π΅ Π·Π½Π°Π΅Ρ‚", Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ½ΠΊΡ€Π΅Ρ‚Π½ΠΎ ΠΎΠ½ собой прСдставляСт. Аналогично
putchar(c)
ΠΏΠΎΠΌΠ΅Ρ‰Π°Π΅Ρ‚ символ Π² стандартный Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎ ΡƒΠΌΠΎΠ»Ρ‡Π°Π½ΠΈΡŽ Ρ‚Π°ΠΊΠΆΠ΅ связан с Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»ΠΎΠΌ.

Ѐункция

printf(3)
выполняСт Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅. Π’Ρ‹Π·ΠΎΠ²Ρ‹
printf
ΠΈ
putchar
ΠΌΠΎΠ³ΡƒΡ‚ ΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒ Π² любом порядкС; Π²Ρ‹Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΎΡ‚Ρ€Π°Π·ΠΈΡ‚ порядок этих Π²Ρ‹Π·ΠΎΠ²ΠΎΠ². Для Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π½ΠΎΠ³ΠΎ прСобразования Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° прСдусмотрСна функция
scanf(3)
; ΠΎΠ½Π° Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ ΠΏΠΎΡ‚ΠΎΠΊ ΠΈ Ρ€Π°Π·Π±ΠΈΠ²Π°Π΅Ρ‚ Π΅Π³ΠΎ, ΠΊΠ°ΠΊ трСбуСтся, Π½Π° строки, числа ΠΈ Ρ‚.ΠΏ. Π’Ρ‹Π·ΠΎΠ²Ρ‹
scanf
ΠΈ
getchar
Ρ‚Π°ΠΊΠΆΠ΅ ΠΌΠΎΠ³ΡƒΡ‚ Ρ‡Π΅Ρ€Π΅Π΄ΠΎΠ²Π°Ρ‚ΡŒΡΡ.

ΠŸΡ€ΠΈΠ²Π΅Π΄Π΅ΠΌ ΠΏΠ΅Ρ€Π²ΡƒΡŽ Π²Π΅Ρ€ΡΠΈΡŽ

vis
:

/* vis: make funny characters visible (version 1) */

#include <stdio.h>

#include <ctype.h>

main() {

Β int c;

Β while ((c = getchar()) != EOF)

Β  if (isascii(c) &&

   (isprint(с) || c=='\n' || c=='\t' || c==' '))

Β Β  putchar(c);

Β  else

Β Β  printf("\\%03o", c);

Β exit(0);

}

Getchar
Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°Π΅Ρ‚ ΠΈΠ· Π²Ρ…ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠ° ΠΎΡ‡Π΅Ρ€Π΅Π΄Π½ΠΎΠΉ Π±Π°ΠΉΡ‚ ΠΈΠ»ΠΈ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF, ΠΊΠΎΠ³Π΄Π° встрСчаСт ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π° (ΠΈΠ»ΠΈ ΠΎΡˆΠΈΠ±ΠΊΡƒ). ΠœΠ΅ΠΆΠ΄Ρƒ ΠΏΡ€ΠΎΡ‡ΠΈΠΌ, EOF Π½Π΅ являСтся Π±Π°ΠΉΡ‚ΠΎΠΌ ΠΈΠ· Ρ„Π°ΠΉΠ»Π°; вспомнитС: Π²ΠΎ Π²Ρ‚ΠΎΡ€ΠΎΠΉ Π³Π»Π°Π²Π΅ объяснялось, Ρ‡Ρ‚ΠΎ Ρ‚Π°ΠΊΠΎΠ΅ "ΠΊΠΎΠ½Π΅Ρ† Ρ„Π°ΠΉΠ»Π°". Π—Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF отличаСтся ΠΎΡ‚ значСния любого Π±Π°ΠΉΡ‚Π°, поэтому Π΅Π³ΠΎ Ρ‚Ρ€ΡƒΠ΄Π½ΠΎ ΡΠΏΡƒΡ‚Π°Ρ‚ΡŒ с Ρ€Π΅Π°Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π΄Π°Π½Π½Ρ‹ΠΌΠΈ; пСрСмСнная с описана ΠΊΠ°ΠΊ
int
(цСлая), Π°; Π½Π΅ ΠΊΠ°ΠΊ
char
(символьная), Ρ‚Π°ΠΊ Ρ‡Ρ‚ΠΎ ΠΎΠ½Π° ΠΌΠΎΠΆΠ΅Ρ‚ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ EOF. Π‘Ρ‚Ρ€ΠΎΠΊΠ°

#include <stdio.h>

Π΄ΠΎΠ»ΠΆΠ½Π° Π½Π°Ρ…ΠΎΠ΄ΠΈΡ‚ΡŒΡΡ Π² Π½Π°Ρ‡Π°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ исходного Ρ„Π°ΠΉΠ»Π°. Π­Ρ‚ΠΎ заставляСт компилятор Π‘ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚ΡŒ Ρ„Π°ΠΉΠ» ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ (

/usr/include/stdio.h
), Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ спСцифицированы стандартныС Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΈ ΠΈ ΠΈΠΌΠ΅Π½Π°, Π² Ρ‚ΠΎΠΌ числС ΠΈ
EOF
. ΠœΡ‹ Π±ΡƒΠ΄Π΅ΠΌ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ
<stdio.h>
ΠΊΠ°ΠΊ ΠΊΡ€Π°Ρ‚ΠΊΡƒΡŽ запись ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΈΠΌΠ΅Π½ΠΈ Ρ„Π°ΠΉΠ»Π°.

Π€Π°ΠΉΠ»

<ctype.h>
β€” Π΅Ρ‰Π΅ ΠΎΠ΄ΠΈΠ½ Ρ„Π°ΠΉΠ» ΠΌΠ°ΠΊΡ€ΠΎΠΎΠΏΡ€Π΅Π΄Π΅Π»Π΅Π½ΠΈΠΉ Π²
/usr/include
, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Π·Π°Π΄Π°Π΅Ρ‚ машинно-нСзависимыС ΠΌΠ°ΠΊΡ€ΠΎΠΊΠΎΠΌΠ°Π½Π΄Ρ‹ (макросы) для классификации символов. Π§Ρ‚ΠΎΠ±Ρ‹ Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ, ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π»ΠΈ Π²Ρ…ΠΎΠ΄Π½ΠΎΠΉ символ Π½Π°Π±ΠΎΡ€Ρƒ ASCII (Ρ‚.Π΅. Π΅Π³ΠΎ Π·Π½Π°Ρ‡Π΅Π½ΠΈΠ΅ мСньшС 0200) ΠΈ пСчатаСтся Π»ΠΈ ΠΎΠ½, ΠΌΡ‹ использовали здСсь
isascii
ΠΈ
isprint
. ΠžΡΡ‚Π°Π»ΡŒΠ½Ρ‹Π΅ макросы пСрСчислСны Π² Ρ‚Π°Π±Π». 6.1. ΠžΡ‚ΠΌΠ΅Ρ‚ΠΈΠΌ, Ρ‡Ρ‚ΠΎ
<ctype.h>
опрСдСляСт символы "ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ строки", "табуляция" ΠΈ ΠΏΡ€ΠΎΠ±Π΅Π» ΠΊΠ°ΠΊ Π½Π΅ΠΏΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹Π΅.

isalpha(c)
Π‘ΡƒΠΊΠ²Π° ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠΈΡ‚ Π°Π»Ρ„Π°Π²ΠΈΡ‚Ρƒ:
a-z A-Z
isupper(c)
ΠŸΡ€ΠΎΠΏΠΈΡΠ½Π°Ρ Π±ΡƒΠΊΠ²Π°:
A-Z
islower(с)
Бтрочная Π±ΡƒΠΊΠ²Π°:
a-z
isdigit(c)
Π¦ΠΈΡ„Ρ€Π°:
0-9
isxdigit(c)
ШСстнадцатСричная Ρ†ΠΈΡ„Ρ€Π°:
0-9 a-f A-F
isalnum(c)
Π‘ΡƒΠΊΠ²Π° ΠΈΠ»ΠΈ Ρ†ΠΈΡ„Ρ€Π°
isspace(c)
ΠŸΡ€ΠΎΠ±Π΅Π», символ табуляции, символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° строки, символ Π²Π΅Ρ€Ρ‚ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠΉ табуляции, символ ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Π° страницы, символ Π²ΠΎΠ·Π²Ρ€Π°Ρ‚Π°
ispunct(c)
НС Π±ΡƒΠΊΠ²Π΅Π½Π½ΠΎ-Ρ†ΠΈΡ„Ρ€ΠΎΠ²ΠΎΠΉ символ, Π½Π΅ ΡƒΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ, Π½Π΅ ΠΏΡ€ΠΎΠ±Π΅Π»
isprint(c)
ΠŸΠ΅Ρ‡Π°Ρ‚Π°Π΅ΠΌΡ‹ΠΉ: любой графичСский символ
iscntrl(c)
Π£ΠΏΡ€Π°Π²Π»ΡΡŽΡ‰ΠΈΠΉ символ:
0 <= с < 040 || с == 0177
isascii(c)
Π‘ΠΈΠΌΠ²ΠΎΠ» ASCII:
0 <= с <= 0177