Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | ||
|
Если в 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; Прочитано: 187 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!