Я студент, изучающий C ++, и мне нужна помощь. В настоящее время я работаю над учебным упражнением из книги Murach's C ++ Programming. Я работаю над упражнением 7-2 (второе упражнение в главе 7). Инструкции для программы находятся здесь: Инструкции из упражнения 7-2 Мне удалось разобраться в большей части этого, но в настоящее время я застрял на шаге 9. Я знаю, как вызывать функции, но когда я запустить программу, она позволяет мне ввести только свое полное имя. После того, как я это сделаю, программа завершится, и я не смогу ввести свой пароль или адрес электронной почты. И да, я добавил возвращаемое значение к своим переменным по мере необходимости. Как сделать так, чтобы программа позволяла мне вводить мое полное имя, пароль и адрес электронной почты, как положено? Ничего из того, что я пробовал, похоже, не работает. Я попытался вернуть значение 0, я попытался создать локальную переменную, а затем добавить возвращаемое значение к указанной переменной, но ничего из этого не сработало. Пожалуйста, помогите мне понять, что я должен делать, поскольку я все еще новичок в C ++ и мне нужно многому научиться. Между прочим, я использую Microsoft Visual Stud ios в качестве своей IDE.
Вот код, который у меня есть для основного. cpp файла:
#include <iostream>
#include <string>
#include "validation.h"
using namespace std;
int main()
{
cout << "Create Account\n\n";
// get full name and parse first name
string full_name;
string first_name;
bool valid_name = false;
while (!valid_name) {
cout << "Enter full name: ";
getline(cin, full_name);
// strip whitespace from front
int i = full_name.find_first_not_of(" \n\t");
if (i > -1) {
full_name = full_name.substr(i);
}
// get first name
int space_index = full_name.find(' ');
if (space_index == -1) {
cout << "You must enter your full name. Please try again.\n";
}
else {
first_name = full_name.substr(0, space_index);
valid_name = true;
}
}
cout << endl;
bool validation::is_valid_password(string password);
bool validation::is_valid_email(string email);
// make sure first name uses initial cap
char letter = first_name[0];
first_name[0] = toupper(letter);
for (int i = 1; i < first_name.length(); ++i) {
letter = first_name[i];
first_name[i] = tolower(letter);
}
// display welcome message
cout << "Hi " << first_name << ",\n"
<< "Thanks for creating an account!\n\n";
}
И код, который у меня есть с проверкой. cpp файл реализации:
#include "validation.h"
#include <string>
#include <iostream>
using namespace std;
using namespace validation;
bool validation::is_valid_password(string password) {
bool valid_password = false;
while (!valid_password) {
valid_password = true;
cout << "Enter password: ";
getline(cin, password);
if (password.length() < 8) {
cout << "Password must be at least 8 characters.\n";
valid_password = false;
}
int index = password.find_first_of("0123456789");
if (index == -1) {
cout << "Password must include a number.\n";
valid_password = false;
}
bool special_character = false;
for (char c : password) {
if (ispunct(c)) {
special_character = true;
break;
}
}
if (!special_character) {
cout << "Password must include a special character.\n";
valid_password = false;
}
if (!valid_password) {
cout << "Please try again.\n";
}
else {
password = password.substr(0, index);
valid_password = true;
}
}
cout << endl;
return false;
}
bool validation::is_valid_email(string email) {
bool valid_email = false;
while (!valid_email) {
valid_email = true;
cout << "Enter email: ";
getline(cin, email);
int at_index = email.find('@');
if (at_index == -1) {
cout << "The email must include an at character (@).\n";
valid_email = false;
}
int dot_index = email.rfind('.');
if (dot_index == -1) {
cout << "The email must include a dot operator (.).\n";
valid_email = false;
}
bool valid_chars = true;
for (char c : email) {
if (c != '@' && c != '.' && c != '_' && c != '-') {
if (!isalnum(c)) {
valid_chars = false;
break;
}
}
}
if (at_index == 0) {
cout << "The local part of the email must include at least one character.\n";
valid_email = false;
}
if (dot_index - at_index == 1) {
cout << "The server name of the email must include at least one character.\n";
valid_email = false;
}
if (email.length() - dot_index - 1 != 3 && email.length() - dot_index - 1 != 2) {
cout << "The domain name of the email must have two or three characters.\n";
valid_email = false;
}
if (!valid_email) {
cout << "Please try again.\n";
}
else {
email = email.substr(0, at_index);
email = email.substr(0, dot_index);
valid_email = true;
}
}
cout << endl;
return false;
}
И код, который у меня есть для файла заголовка проверки:
#ifndef T_FRYE_VALIDATION_H
#define T_FRYE_VALIDATION_H
#endif // !T_FRYE_VALIDATION_H
#include <string>
using namespace std;
namespace validation {
bool is_valid_password(string password);
bool is_valid_email(string email);
}
Я знаю, что это много читать, и мне очень жаль, но я не знаю, что делать дальше. Если кто-нибудь может мне помочь, я буду очень признателен.