Функція gets ()
Книга: Мова Сі - керівництво для початківців
Функція gets ()
Ця функція зчитування рядка дуже зручна для діалогових систем. Вона отримує рядок від стандартного пристрою введення вашої системи, яким, як ми припускаємо, є клавіатура. Оскільки рядок не має заздалегідь заданої довжини, функція gets () повинна знати, коли їй припинити роботу. Функція Новомосковскет символи до тих пір, поки їй не зустрінеться символ нового рядка ( 'n'), який ви створюєте, натискаючи клавішу [введення]. Функція бере все символи до (але не включаючи) символу нового рядка, приєднує до них нуль-символ ( '') і передає рядок викликає програмі. Ось простий спосіб використання функції.
char name [81]; /* виділення пам'яті */
printf ( "Привіт, як вас звуть? n");
gets (name); / * Розміщення введеного імені в рядок "name" * /
printf ( "Гарне ім'я,% s. n". name);
Функція прийме будь-яке ім'я (включно з пробілами) довжиною до 80 символів. (Не забудьте запасти один символ для ''.)
Відзначимо, що ми хотіли за допомогою функції gets () впливати на щось (name) в зухвалій програмі. Значить, потрібно використовувати покажчик в якості аргументу; а ім'я масиву, звичайно, є його покажчиком.
Функція gets () має більші можливості, ніж показано в останньому прикладі. Погляньте на цю програму:
printf ( "Привіт, як вас звуть? n");
printf ( "% s? Ax!% s! n", name, ptr);
Привіт як вас звати?
Тоні де Туна? Ах! Тоні де Туна!
Функція gets () надає вам два способи введення рядка!
1. Використовує метод покажчиків для передачі рядка в name.
2. Використовує ключове слово return для повернення рядка в ptr.
Нагадаємо, що ptr є покажчиком на тип char. Це означає, що gets () повинна повернути значення, яке є покажчиком на тип char. І в наведеному вище викладі ви можете побачити, що ми так і описали gets ().
говорить про те, що gets () є функцією (звідси круглі дужки) типу "покажчик на тип char" (тому * і char). У прикладі отримання імені1 ми обходилися без цього опису, тому що ми ніколи не намагалися використовувати повернене значення функції gets ().
Між іншим, ви можете також описати покажчик на функцію. Це виглядало б так:
Структура функції gets () виглядала б приблизно так:
де NULL визначено в файлі stdio.h як 0. За допомогою покажчика масиву name присвоюється значення. Наявність повернення дозволяє привласнювати значення всієї gets (name) і виконувати перевірку на EOF. Цей двоякий підхід більш компактний, ніж використання функції getchar (). яка має повернення без аргументу.
while ((ch = getchar ())! = EOF)