Русификация под Visual
При работе в консольном приложении Visual ввод-вывод выполняется в кодировке ASCII, которая является международной только в первой половине кодов (от 0 до 127, см. Приложение 1). Символы национального (русского) алфавита - вторая половина кодов. Для выполнения этого можно использовать функцию CharToOem () для преобразования символов из кодировки ANSI в кодировку ASCII и функцию OemToChar () для обратного преобразования, находящиеся в библиотеке windows.h. Приведем пример их использования. ... #include<windows.h> char bufRus[256]; char* Rus(const char*); // Описание прототипа void main(void) { int a=2; float r=5.5; char s[]="Минск!", s1[256]; printf("\n %s ",Rus(s)); printf("\n Vvedi string "); gets(s1); printf("\n %s ",s1); printf(Rus("\n Значение а = %d r = %f\n"), a, r); } char* Rus(const char *text) // Функция преобразования символов { CharToOem(text, bufRus); return bufRus; } Функции пользователя
В отличие от других языков программирования высокого уровня в языке «С» нет разделения на подпрограммы-процедуры, подпрограммы-функции, здесь вся программа строится только из функций. В языке «С» любая подпрограмма – функция, представляющая собой отдельный программный модуль, к которому можно обратиться в любой момент и (в случае необходимости) передавать через параметры некоторые исходные данные и который (в случае необходимости) способен возвращать один или несколько результатов своей работы.
Декларация функции Как объект языка Си, функцию необходимо объявить. Объявление функции пользователя, т.е. ее декларация, выполняется в двух формах – в форме описания и в форме определения. Описание функции заключается в приведении вначале программного файла ее прототипа. Прототип функции сообщает компилятору о том, что далее в тексте программы будет приведено ее полное определение (полный ее текст): в текущем или другом файле исходного текста либо находится в библиотеке. В стандарте языка используется следующий способ декларации функций: тип_результата ID _функции(тип переменной1, …, тип переменной N); Заметим, что идентификаторы переменных в круглых скобках прототипа указывать не обязательно, так как компилятор языка их не обрабатывает. Описание прототипа дает возможность компилятору проверить соответствие типов и количества параметров при фактическом вызове этой функции. Пример описания функции fun со списком параметров: float fun(int, float, int, int); Полное определение функции имеет следующий вид: тип_результата ID _функции(список параметров) { код функции } Тип результата определяет тип выражения, значение которого возвращается в точку ее вызова при помощи оператора return <выражение>. Если тип функции не указан, то по умолчанию предполагается тип int. Список параметров состоит из перечня типов и идентификаторов параметров, разделенных запятыми. Функция может не иметь параметров, но круглые скобки необходимы в любом случае. Если функция не возвращает никакого значения, она должна быть описана как функция типа void (пустая). В данном случае оператор return можно не ставить. В функции может быть несколько операторов return, но может и не быть ни одного. В таких случаях возврат в вызывающую программу происходит после выполнения последнего оператора в функции. Пример функции, определяющей наименьшее значение из двух целочисленных переменных: int min (int x, int y) { return (x<y)? x: y; } Все функции, возвращающие значение, должны использоваться в правой части выражений языка С, иначе возвращаемый результат будет утерян. Если у функции отсутствует список параметров, то при декларации такой функции желательно в круглых скобках также указать ключевое слово void. Например, void main(void). В языке С каждая функция – это отдельный блок программы, вход в который возможен только через вызов данной функции. Наличие определения функции делает излишним запись ее описания в остатке файла исходного текста.
|