Array M. УЭИТ - Язык Си - руководство для начинающих

Здесь есть возможность читать онлайн «Array M. УЭИТ - Язык Си - руководство для начинающих» весь текст электронной книги совершенно бесплатно (целиком полную версию без сокращений). В некоторых случаях можно слушать аудио, скачать через торрент в формате fb2 и присутствует краткое содержание. Город: Москва, Год выпуска: 1988, ISBN: 1988, Издательство: Мир, Жанр: Программирование, на русском языке. Описание произведения, (предисловие) а так же отзывы посетителей доступны на портале библиотеки ЛибКат.

Язык Си - руководство для начинающих: краткое содержание, описание и аннотация

Предлагаем к чтению аннотацию, описание, краткое содержание или предисловие (зависит от того, что написал сам автор книги «Язык Си - руководство для начинающих»). Если вы не нашли необходимую информацию о книге — напишите в комментариях, мы постараемся отыскать её.

M. УЭИТ   С. ПРАТА    Д. МАРТИН
Язык Си — руководство для начинающих

Язык Си - руководство для начинающих — читать онлайн бесплатно полную книгу (весь текст) целиком

Ниже представлен текст книги, разбитый по страницам. Система сохранения места последней прочитанной страницы, позволяет с удобством читать онлайн бесплатно книгу «Язык Си - руководство для начинающих», без необходимости каждый раз заново искать на чём Вы остановились. Поставьте закладку, и сможете в любой момент перейти на страницу, на которой закончили чтение.

Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Функция strlen( )

/* Функция Прокруста */

fit(string, size)

char *string;

int size;

{

if(strlen(string) > size)

*(string + size) = '\0';

}

Проверьте ее в "деле" в этой тестовой программе:

/* тест */

main( ) {

static char mesg[ ] = "Ну, теперь держитесь, компьютероманы.";

puts(mesg);

fit(mesg, 10);

puts(mesg);

}

Программа выдает:

Ну, теперь держитесь, компьютероманы.

Ну, теперь

Наша функция помещает символ '\0'в одиннадцатый элемент массива, заменяя символ пробела. Остаток массива остается на старом месте, но puts( )прекращает работу на первом нуль-символе и игнорирует остаток массива.

Функция strcat( )

Вот что умеет делать функция strcat( ):

/* объединение двух строк */

#include

< stdio.h>

main( )

{

static char flower [80];

static char addon[ ] = "ы пахнут старыми ботинками.";

puts(" Назовите ваш любимый цветок." );

gets(flower);

strcat (flower, addon);

puts(flower);

puts(addon);

}

Получаем на экране:

Назовите ваш любимый цветок.

Ирис

Ирисы пахнут старыми ботинками.

Очевидно, что strcat( )( string concatenation ) использует в качестве аргументов две строки. Копия второй строки присоединяется к концу первой, и это объединение становится новой первой строкой. Вторая строка не изменяется.

Внимание! Эта функция не проверяет, умещается ли вторая строка в первом массиве. Если вы ошиблись при выделении памяти для первого массива, то у вас возникнут проблемы. Конечно, можно использовать strlen( ) для определения размера строки до объединения.

/* Объединение двух строк, проверка размера первой */

#include

#define SIZE 80

main( )

{

static char flower[SIZE];

static char addon[ ] = " ы пахнут старыми ботинками." ;

puts(" Назовите ваш любимый цветок. ");

gets(flower);

if((strlen(addon) + strlen(flower) + 1) < SIZE)

strcat (flower, addon);

puts(flower);

}

Мы добавляем 1 к объединенной длине для размещения нуль-символа.

Функция strcmp( )

Предположим, что вы хотите сравнить чей-то ответ со строкой, находящейся в памяти:

/* Будет ли это работать? */

#include

#define ANSWER " Грант"

main( )

{

char try [40];

puts(" Кто похоронен в могиле Гранта?" );

gets(try);

while(try != ANSWER)

puts(" Нет, неверно. Попытайтесь еще раз." );

gets(try);

} puts(" Правильно.");

}

Хотя эта программа и смотрится неплохо, она не будет работать правильно, tryи ANSWERна самом деле являются указателями, поэтому сравнение (try != ANSWER)спрашивает не о том, одинаковы ли эти две строки, а одинаковы ли два адреса, на которые ссылаются tryи ANSWER. Так как ANSWERи tryзапоминаются в разных ячейках, эти два указателя никогда не могут быть одним и тем же, и пользователю всегда сообщается, что программа неверна. Такие программы обескураживают людей.

Нам нужна функция, которая сравнивает содержимое строк, а не их адреса. Можно было бы придумать ее, но это уже сделала за нас функция strcmp( )( string comparision ).

Теперь исправим нашу программу:

/* это будет работать */

#includе

#define ANSWER " Грант"

main( )

{

char try [40];

puts(" Кто похоронен в могиле Гранта?" );

gets(try);

while(strcmp(try, ANSWER) != 0)

{ puts(" Нет, неверно. Попытайтесь еще раз.");

gets(try);

} puts(" Правильно!");

}

Так как ненулевые значения интерпретируются всегда как "true", мы можем сократить оператор while do while(strcmp(try, ANSWER)).

Из этого примера можно сделать вывод, что strcmp( )использует два указателя строк в качестве аргументов и возвращает значение 0, если эти две строки одинаковы. Прекрасно, если вы придете к такому выводу.

Хорошо, что Strcmp( )сравнивает строки, а не массивы. Поэтому, хотя массив tryзанимает 40 ячеек памяти, а " Грант" - только 6 (не забывайте, что одна нужна для нуль-символа), сравнение выполняется только с частью try, до его первого нуль-символа. Такую функцию strcmp( )можно использовать для сравнения строк, находящихся в массивах разной длины.

А что если пользователь ответил " ГРАНТ" или " грант" или "Улиссес С. Грант" ? Хорошо, если пользователю сказали, что он ошибся? Чтобы сделать программу гибкой, вы должны предусмотреть несколько допустимых правильных ответов. Здесь есть некоторые тонкости. Вы могли бы в операторе #defineопределить в качестве ответа " ГРАНТ" и написать функцию, которая превращает любой ответ только в это слово. Это устраняет проблему накопления, но остаются другие поводы для беспокойства.

Читать дальше
Тёмная тема
Сбросить

Интервал:

Закладка:

Сделать

Похожие книги на «Язык Си - руководство для начинающих»

Представляем Вашему вниманию похожие книги на «Язык Си - руководство для начинающих» списком для выбора. Мы отобрали схожую по названию и смыслу литературу в надежде предоставить читателям больше вариантов отыскать новые, интересные, ещё непрочитанные произведения.


Отзывы о книге «Язык Си - руководство для начинающих»

Обсуждение, отзывы о книге «Язык Си - руководство для начинающих» и просто собственные мнения читателей. Оставьте ваши комментарии, напишите, что Вы думаете о произведении, его смысле или главных героях. Укажите что конкретно понравилось, а что нет, и почему Вы так считаете.

x