// ввод строк char* string_input(char* header, char* inputitem) { char *tmp; //временная переменная (вводимая строка) char rec; // переменная хранящая вводимый символ int i = 0; // вспомогательный индекс int stop = 0; // маркер корректности и прекращения ввода int correct = 0; // маркер подтверждения корректности ввода со стороны пользователя do { tmp = NULL; // временная переменная для хранения введенной строки do { do { system("cls"); rewind(stdin); printf_s("\n Минимальное количество вводимых символов - %d", MIN_STRING_LENGTH); printf_s("\n Максимальное количество вводимых символов - %d", MAX_STRING_LENGTH); printf_s("\n Ввод всех символов свыше первых %d будет проигнорирован", MAX_STRING_LENGTH); printf_s("\n Последовательный ряд знаков пунктуации будет заменен 1-м знаком в данном ряду"); printf_s("\n Начало ввода с пробела, знаков пунктуации или нажатия Enter недопустимо"); printf_s("\n Для завершения ввода нажмите Enter\n\n"); printf_s("\n %s", header); printf_s("\n\n %s: ", inputitem); // ввод и проверка корректности ввода первого символа строки rec = getchar(); if (punctuation(rec) || rec == '\n' || rec == ' ' || rec == '\t') { system("cls"); printf_s("\n ОШИБКА.\n\n Не начинайте ввод с пробелов, знаков пунктуации или нажатия Enter\n\n "); system("pause"); } else { tmp = (char*)malloc(sizeof(char*)); *tmp = toupper(rec); i = 1; } } while (punctuation(rec) || rec == '\n' || rec == ' ' || rec == '\t'); // ввод последующих символов while ((rec = getchar()) != '\n' && i < MAX_STRING_LENGTH) { // замена табуляции пробелом if (rec == '\t') rec = ' '; // пропуск избыточных знаков препинания и пробелов if (((punctuation(rec)) && punctuation(tmp[i - 1])) || (rec == ' ' && tmp[i - 1] == ' ')) continue; else { tmp = (char*)realloc(tmp, (i + 1)*sizeof(char)); if (tmp[i - 1] == ' ') // если перед символом пробел { tmp[i++] = toupper(rec); // ввод с заглавной буквы if (i >= MAX_STRING_LENGTH) { printf_s("\n Длина строки достигла лимита в %d символов", MAX_STRING_LENGTH); printf_s("\n Все введенные символы, свыше первых %d будут проигнорированны\n\n ", MAX_STRING_LENGTH); system("pause"); } } else { tmp[i++] = tolower(rec); // ввод прописных букв, в случае если перед символом не стоит пробел if (i >= MAX_STRING_LENGTH) { printf_s("\n Длина строки достигла лимита в %d символов. Строка будет обрезана\n\n ", MAX_STRING_LENGTH); system("pause"); } } } } if (*(tmp + i - 1) == ' ') //если последний символ пробел i--; else tmp = (char*)realloc(tmp, (i + 1)*sizeof(char)); //выделение памяти под символ конца строки *(tmp + i) = '\0'; //конец строки if (i < MIN_STRING_LENGTH) //если введено менее 2 символов { system("cls"); printf_s("\n ОШИБКА \n\n Введите более %d символов\n\n ", MIN_STRING_LENGTH); system("pause"); } else stop = 1; // ввод корректен } while (!stop); // подтверждение точности ввода данных со стороны пользователя do { system("cls"); printf_s("\n %s\n\n", header); printf_s("\n Проверьте введенные данные: %s", tmp); printf_s("\n\n Исправить введенные данные?\n\n 1 - Нет\n 0 - Да"); correct = userchoice(); if (correct < 0 || correct > 1) { system("cls"); printf_s("\n ОШИБКА\n"); printf_s("\n Введите существующий пункт\n\n "); system("pause"); } } while (correct < 0 || correct > 1); } while (!correct); // пока пользователь не подвердит точность введенных данных return tmp; }
//коррекция считанной строки из файла char* str_read(char* str, int* i) { char* tmp = NULL; //хранит строку с нужным значением int l = *i; //индекс считанной строки int j = 0; //индекс строки с нужным значением while (str[l] == ' ' || punctuation(str[l]) && str[l] != '\0') l++; if (str[l] == '\0') return NULL; else { while (str[l] != ' ' && j < MAX_STRING_LENGTH) { if (punctuation(str[l]) && punctuation(str[l + 1])) l++; else { tmp = (char*)realloc(tmp, (j + 1)*sizeof(char)); tmp[j++] = str[l++]; } } if (j == MAX_STRING_LENGTH) while (str[l] != '|') ++l; if (str[l] == ' ' && str[l + 1] != '|') { if (j != MAX_STRING_LENGTH - 1) { tmp = (char*)realloc(tmp, (j + 1)*sizeof(char)); tmp[j++] = str[l++]; while (str[l] == ' ' && str[l] != '\0') l++; if (str[l] == '\0') return NULL; else { while (str[l] != ' ' && j < MAX_STRING_LENGTH) { if (punctuation(str[l]) && punctuation(str[l + 1])) i++; else { tmp = (char*)realloc(tmp, (j + 1)*sizeof(char)); tmp[j++] = str[l++]; } } if (j == MAX_STRING_LENGTH) while (str[l] != '|') ++l; } } } if (j < MIN_STRING_LENGTH) { tmp = NULL; tmp = (char*)malloc(sizeof("0\0")); tmp = "0\0"; } else { tmp = (char*)realloc(tmp, (j + 1)*sizeof(char)); tmp[j] = '\0'; } *i = l; return tmp; } }
bool User::validate_password(std::wstring password) { return latin(password) && cyrillic(password) && number(password) && punctuation(password); }