Студопедия.Орг Главная | Случайная страница | Контакты | Мы поможем в написании вашей работы!  
 

Замечание. Если в IDE вы получили ошибки "fixup", используйте команду Project\Build All, а затем, чтобы выполнить программу



Если в IDE вы получили ошибки "fixup", используйте команду Pr oject\Build All, а затем, чтобы выполнить программу, нажмите <Ctrl+F9>.

Чтобы программа успешно завершилась, аккуратно введите текст Borland C++, используя прописные и строчные буквы. Если вы введете пароль неправильно, программа отобразит сообщение об ошибке и потребует начать сначала. Как и другие приличные программы с парольным входом, программа PASSWORD очищает экран, чтобы никто не смог подсмотреть ваш пароль из-за плеча и воспользоваться вашей секретной программой.

Листинг 6.6. PASSWORD.C (предложение ввести пароль)

1: #include <stdio.h>

2: #include <stdlib.h>

3: #include <conio.h>

4: #include <string. h>

5: #include <alloc. h>

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().





Дата публикования: 2015-01-23; Прочитано: 186 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!



studopedia.org - Студопедия.Орг - 2014-2024 год. Студопедия не является автором материалов, которые размещены. Но предоставляет возможность бесплатного использования (0.006 с)...