Категория ‘С/С++’
* Списък на функциите от други библиотеки
Публикувано на 26 октомври 2008 в раздел С/С++.
Представяме списък с функциите на други често използвани библиотеки:
1. string.h:
memchr();
memcmp();
memcpy();
memmove();
memset();
strcat();
strncat();
strchr();
strcmp();
strncmp(); Прочети още...
* Библиотека ctype.h
Публикувано на 26 октомври 2008 в раздел С/С++.
Библиотеката ctype.h съдържа следните функции:
isalnum(char c): Проверява дали символа е буква (A-Z или a-z) или цифра (0-9)
isalpha(char c): Проверява дали символа е буква (A-Z или a-z)
iscntrl(char c): Проверява дали символа 0x00-0x1F или 0x7F
isdigit(char c): Проверява дали символа е цифра (0-9)
isgraph(char c): Проверява дали символа е от множеството, което може да се отпечата, без space (0x21-0x7E)
islower(char c): Проверява дали подадения символ е малка буква (a-z)
isprint(char c): Проверява дали символа е от множеството, което може да се отпечата (0x20-0x7E)
ispunct(char c): Проверява дали символа е от множеството, което може да се отпечата, но без space и всички alphanum символи
isspace(char c): Проверява дали символа е space, tab, carriage return, new line, vertical tab или formfeed
isupper(char c): Проверява дали символа е главна буква (A-Z)
isxdigit(char c): Проверява дали символа е шеснайсетично число (0-9, A-F или a-f)
char tolower(char c): Преобразува главна в малка буква
char toupper(char c): Преобразува малка в главна буква
* Работа с файлове от високо ниво
Публикувано на 26 октомври 2008 в раздел С/С++.
Когато създаваме каквато и да е програма обработваща данни обикновено се налага да съхраняваме данните след приключването на програмата. Много често се налага и прочитане на данни от вече съществуващи файлове. В С функциите за достъп до файлове от високо ниво са fopen, fclose, getc, putc, fgetc, fputc, ungetc, fseek, fprintf, sprintf, fscanf, sscanf, remove, fgets и fputs. Всички те се намират в stdio.h.
Преди да започнем описанието на функциите трябва да отбележим, че има два вида достъп до дискови файлове - буфериран и небуфериран. Функциите от високо ниво използват буфериран достъп до файловете. При него се чете или записва символ по символ и програмистът не се занимава със системно зависими особености. Прочети още...
* Данни с изброими стойности
Публикувано на 25 октомври 2008 в раздел С/С++.
Може да създаваме и данни, които приемат стойности от крайно множество на целите числа. Изключително е удобно да ги използваме в ситуации, които се характеризират със съвкупност от възможни варианти. Общият синтаксис е:
enum име_на_типа{списък_на_стойностите}променливи;
Типичен пример за С е липсата на булеви променливи в езика: Прочети още...
* Предефиниране на типове
Публикувано на 25 октомври 2008 в раздел С/С++.
Друга удобна конструкция в езика С е създаването на собствени имена на типовете на променливите. Това се извършва чрез описанието typedef:
typedef <стар тип> <нов тип>;
Името определено с typedef може да се използва за описание на променливи (то е еквивалентно на съществуващ тип). Например:
typedef int NEWNAME; NEWNAME i,j;
Прочети още...
* Разредни полета
Публикувано на 25 октомври 2008 в раздел С/С++.
В езика за програмиране С могат да се дефинират набори от последователни битове. Такива набори се наричат "разредни полета". Те осигуряват връзката между високото ниво на езика и ниското ниво на апаратната част.
Разредните полета се дефинират като елементи на структура по следния начин:
unsigned int <име>:<размер>
Следният пример демонстрира дефинирането на разредни полета: Прочети още...
* Обединения
Публикувано на 25 октомври 2008 в раздел С/С++.
Обединенията са много сходни с описаните вече структури. Всички правила за дефиниране на структури са валидни и за обединенията:
union name{ int i; float f; char c; double d; } x,y; ... union name z;
Обръщението към елементи също е аналогично. Съществената разлика между обединенията и структурите е свързана с паметта, която се резервира при дефиниране на конкретна променлива. Прочети още...
* Проблеми свързани с използването на scanf
Публикувано на 25 октомври 2008 в раздел С/С++.
Както вече се запознахте scanf е удобна функция за четене на различни типове данни от клавиатурата. Всеки, който я е използвал активно обаче се е сблъсквал с един много неприятен проблем - невалидно подадени данни от клавиатурата. Например:
int number; printf("I will check if your numbers are odd or even. Type 0 to exit.\n\n"); do{ printf("type a number"); scanf("%d", &number); if (number != 0){ if (number%2 == 0) printf("Even!\n"); else printf("Odd!\n"); } } while (number != 0);
На пръв поглед програмата върви нормално. Въвеждаме числа от клавиатурата и програмата проверява дали са четни или нечетни. Когато въведем 0 програмата ще спре. Какво ще се случи обаче ако не въведем число, а например буквата 'a'? Прочети още...
* Рекурсивни структури
Публикувано на 24 октомври 2008 в раздел С/С++.
Дефинирането на указател като част от структура е напълно валидна конструкция. Освен това е напълно възможно и дефинирането на указател към структура във структура. По този начин е възможно създаването на т.нар. "рекурсивни структури":
struct rec{ int k; struct rec *nextrec; };
Лесно можете да направите аналогия с рекурсивните функции. Използвайки подобни структури можем лесно да създаваме добре познати структури от данни като линейни списъци и бинарни дървета например.
* Побитови операции
Публикувано на 24 октомври 2008 в раздел С/С++.
Езикът С притежава част от качествата на асемблерните езици. Той разполага с пълен набор от операции за работа с отделни битове на числените стойности - поразредни операции. Тези операции позволяват проверяване, установяване или преместване на отделни битове на променливи от тип int или char. Поразредните операции се използват много често при писането на драйвери за устройства.