Язык Си в примерах/Верхний регистр: различия между версиями

Содержимое удалено Содержимое добавлено
→‎Кроме латиницы: Новый раздел.
м <source> -> <syntaxhighlight> (phab:T237267)
Строка 13:
 
Обратите внимание на то, что с символами (переменными типа <code>char</code>)
можно оперировать как с числами. В частности, <sourcesyntaxhighlight lang="c" enclose="none" >'Z' - 'A'</sourcesyntaxhighlight> есть число, равное
разности кодов символов <code >A</code> и <code >Z</code>, то есть (при использовании кодовой таблицы ASCII) 25 — число букв в латинском алфавите минус 1.
Символы можно также сравнивать друг с другом, при этом сравниваются их коды.
 
{{Якорь |upper.c}}
<sourcesyntaxhighlight lang="c">
#include <assert.h>
#include <stdio.h>
Строка 36:
return 0;
}
</syntaxhighlight>
</source>
 
''Главный цикл'' (и ''условие корректности'' ввода) этой программы почти полностью совпадают с рассмотренными в разделе [[../ASCII коды символов/]]. Однако, вместо использования <code >printf</code> для вывода <em >значений</em> считанных кодов, здесь мы используем функцию <code >putchar</code> для вывода <em >самих</em> кодов (знаков), возможно — после преобразования.<ref name="putchar" /> В коде по-прежнему используются функции <code >getchar</code> и <code >ferror</code>.<ref name="getchar" /><ref name="ferror" />
Строка 49:
 
{{Якорь |toupper.c}}
<sourcesyntaxhighlight lang="c">
#include <assert.h>
#include <ctype.h>
Строка 65:
return 0;
}
</syntaxhighlight>
</source>
 
== Кроме латиницы ==
Строка 74:
 
Соответственно, [[#toupper.c |в исходный вариант]] вносятся следующие изменения.
# Появляется вызов <sourcesyntaxhighlight lang="c" enclose="none" >setlocale (LC_ALL, "")</sourcesyntaxhighlight>, ''инициализирующий'' локаль в соответствии с текущими настройками. (По-умолчанию, при запуске программы полагается <sourcesyntaxhighlight lang="c" enclose="none" >setlocale (LC_ALL, "C")</sourcesyntaxhighlight> — установка «стандартной» локали.)<ref name="setlocale" />
# Функции <code >getwchar</code>, <code >towupper</code>, <code >putwchar</code> заменяют соответствующие для «узких» символов (<code >getchar</code>, <code >toupper</code>, <code >putchar</code>.) Соответственно меняются тип (<code >int</code> → <code >wint_t</code>) и константа признака исчерпания входного потока (<code >EOF</code> → <code >WEOF</code>.)<ref name="getwchar" /><ref name="towupper" /><ref name="putwchar" />
# Включаются соответствующие ''заголовки'' (<code >locale.h</code>, <code >wchar.h</code>, <code >wctype.h</code>.)
 
{{Якорь |towupper.c}}
<sourcesyntaxhighlight lang="c">
#include <assert.h>
#include <locale.h>
Строка 101:
return 0;
}
</syntaxhighlight>
</source>
 
Отметим, впрочем, что принятые в конкретном языке правила обращения со строчными и заглавными могут оказаться сложнее простой зависимости символ—символ, <em >предполагаемой</em> в данном примере. Так, например, правила немецкого языка ставят в соответствие строчной «ß» <em >пару</em> заглавных — «SS» (например: {{lang |de|[[wikt:Straße#Немецкий |Straße]] → STRASSE}}), что ни коим образом не может быть реализовано функцией <code >towupper</code>.