Язык Си - руководство для начинающих
Шрифт:
#deline MSG "У вас, наверное, много талантов.
Расскажите о некоторых" .
/* константа символьной строки */
#define NULL 0
#define LIM 5
#define LINLEN 81 /* максимальная длина строки + 1 */
char ml[ ] = " Только ограничьтесь одной строкой.";
/* инициализация
char *m2 = " Если вы не можете вспомнить что-нибудь, придумайте.";
/* инициализация указателя внешнего символьного массива */
main
{
char name[LlNLEN];
static char talents[LINLEN];
int i;
int count = 0;
char *m3 = " \n Достаточно обо мне -- Как вас зовут?";
/* инициализация указателя */
static char *mytal[LlM] = ("Быстро складываю числа",
"Точно умножаю",
"Записываю данные",
"Правильно выполняю команды",
"Понимаю язык Си"};
/* инициализация массива строк */
printf("Привет! Я Клайд, компьютер.
У меня много талантов.\n");
printf("%s \n", "Позвольте рассказать о некоторых из них.");
puts(" Каковы они? Ах да, вот их неполный перечень.");
for(i = 0; i<LIM; i++)
puts(mytal[i]); /* печатает перечень талантов компьютера */
puts(m3);
gets(name);
printf(" Хорошо, %s, %s\n" , name, MSG);
printf(" %s\n %s\n", m1, m2);
gets(talents);
puts(" Давайте, посмотрим, получил ли я этот перечень:");
puts(talents);
printf(" Спасибо за информацию, %s \n" , name);
}
PИC. 13.1. Программа, использующая строки.
Чтобы помочь вам разобраться в том, что делает эта программа, мы приводим результат ее работы:
Привет, я Клайд, компьютер. У меня много талантов.
Позвольте рассказать о некоторых из них.
Каковы
Быстро складываю числа.
Точно умножаю.
Записываю данные.
Правильно выполняю команды команды.
Понимаю язык Си.
Достаточно обо мне - Как вас зовут? Найджел Барнтвит
Хорошо, Найджел Барнтвит, у вас, наверное, много талантов.
Расскажите о некоторых.
Только ограничтесь одной строкой.
Если вы не можете вспомнить что-нибудь, придумайте.
Фехтование, пение тирольских песен, симуляция, дегустация сыра.
Давайте посмотрим, получил ли я этот перечень.
Фехтование, пение тирольских песен, симуляция, дегустация сыра.
Спасибо за информацию, Найджел Барнтвит.
Тщательно исследуем программу. Но вместо того чтобы просматривать строку за строкой, применим более общий подход. Сначала рассмотрим способы определения строк в программе. Затем выясним, что нужно для чтения строки в программе. И наконец, изучим способы вывода строки.
ОПРЕДЕЛЕНИЕ СТРОК В ПРОГРАММЕ
Строковые константы
Всякий раз, когда компилятор встречается с чем-то, заключенным в двойные кавычки, он определяет это как строковую константу. Символы, заключенные в кавычки, плюс завершающий символ '\0', записываются в последовательные ячейки памяти. Компилятор подсчитывает количество символов, поскольку ему нужно знать размер памяти, необходимой для запоминания строки. Наша программа использует несколько таких строковых констант, чаще всего в качестве аргументов функций printf и puts. Заметим также, что мы можем определять строковые константы при помощи директивы #define.
Если вы хотите включить в строку символ двойной кавычки, ему должен предшествовать символ обратной дробной черты:
рrintf("\"Беги, Спот, беги!\" - сказал Дик.\n");
В результате работы этого оператора будет напечатана строка:
"Беги, Cпот, беги!
– "сказал Дик.
Cтроковые константы размещаются в статической памяти. Вся фраза в кавычках является указателем на место в памяти, где записана строка. Это аналогично использованию имени массива, служащего указателем на расположение массива. Если это действительно так, то как выглядит оператор, который выводит строку?