Головна

зауваження

  1. вступне зауваження
  2. заключне зауваження
  3. зауваження
  4. зауваження
  5. зауваження
  6. зауваження
  7. зауваження

Якщо в IDE ви отримали помилки "fixup", використовуйте команду Project \ Build All, а потім, щоб виконати програму, натисніть .

Щоб програма успішно завершилася, акуратно введіть текст Borland C ++, використовуючи великі та малі літери. Якщо ви введете пароль неправильно, програма відобразить повідомлення про помилку і зажадає почати спочатку. Як і інші пристойні програми з парольним входом, програма PASSWORD очищає екран, щоб ніхто не зміг підглянути ваш пароль через плеча і скористатися вашою секретною програмою.

Лістинг 6.6. PASSWORD.C (пропозиція ввести пароль)

1: #include

2: #include

3: #include

4: #include

5: #include

6: #include "gets.h"

7:

8: #define FALSE 0

9: #define TRUE 1

10: #define PASSWORD "Borland C ++"

11: #define PROMPT "Enter password:"

12:

13: main ()

14: {

15: char * s;

16: int done = FALSE;

17:

18: clrscr ();

19: while (! Done) {

20: printf (PROMPT);

21: s = GetStringAt (strlen (PROMPT) + 1, wherey (), MAXLEN);

22: clrscr ();

23: if (! S) {

24: puts ( "Error: Out of memory");

25: exit (1);

26:} else {

27: done = (strcmp (s, PASSWORD) == 0);

28: if (! Done)

29: puts ( "ERROR in password! Type" PASSWORD "to quit");

30: free (s); / * Звільнення пам'яті, виділеної функцією GetStringAt () * /

31:}

32:}

33: clrscr ();

34: puts ( "Correct password given");

35: return 0;

36:}

37:

___

У рядку 27 показано, як порівнювати два рядки, в даному випадку для того, щоб визначити правильність введеного пароля. оператор

done = (strcmp (s, PASSWORD) == 0);

встановлює змінну done що дорівнює значенню "істина" (що відповідає будь-якому нульове значення), якщо рядок, що адресується покажчиком s, І PASSWORD (макроозначень, яке розширюється в літерально рядок) рівні. якщо i - змінна типу int і якщо аи b - покажчики на char або символьні масиви, то оператор

i = strcmp (a, b);

встановить i рівній -1 або іншому негативного числа, якщо рядок, що адресується покажчиком а, В алфавітному порядку менше рядка, що адресується покажчиком b. Якщо рядки в точності збігаються, функція поверне нуль. вона поверне +1 або інше позитивне число, якщо рядок а в алфавітному порядку більше рядка b.

Функція strcmp () чутлива до регістру букв - вона вважає малі літери більше їх прописних еквівалентів (так як літери нижнього регістру мають великі значення коду ASCII, ніж літери верхнього регістру). Для порівняння двох рядків без урахування регістру викличте функцію stricmp (). Літера i символізує наказ "ignore case" ( "ігнорувати регістр"). Ця функція діє аналогічно функції strcmp (), але перед порівнянням перетворює всі букви в прописні. Рядок "Apple" алфавітно виявиться менше рядка "apple", якщо порівняння виконувалося за допомогою функції strcmp (). Якщо ж для порівняння використовувати функцію stricmp (), то ці рядки будуть вважатися ідентичними.

Щоб порівняти тільки частина двох рядків, використовуйте функцію strncmp (). Наприклад, оператор

i = strncmp (s1, s2, 2);

встановить цілу змінну i рівною нулю тільки в тому випадку, якщо перші два символи рядків, адресованих покажчиками s1 і s2, в точності збігаються. Для безрегістрового порівняння викликайте функцію strnicmp ().



зауваження | Конкатенация строк

строкові змінні | строкові покажчики | Нульові рядки і нульові символи | відображення рядків | читання рядків | зауваження | Визначення довжини рядків | копіювання рядків | дублювання рядків | попередження |

© um.co.ua - учбові матеріали та реферати