Логическая ошибка при проверке, является ли ввод буквенно-цифровым

Цель этой программы — проверить, является ли введенный пользователем символ буквенно-цифровым. Как только функция void подтверждает правильность ввода, она передается в строковый тест для вывода сообщения. Я знаю, что это не очень хорошее кодирование, но это нужно делать таким образом.

Я продолжаю получать логическую ошибку & Я не могу понять, почему? Может кто-нибудь, пожалуйста, помогите?

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

void get_option(char& input);
/**
Takes character entered user input and loops until correct answer
@param y character entered by user
@return to main() once valid entry received
*/
string test(char);
/**
Takes checks character entered user input and loops until correct answer
@param y alphanumeric character entered by user
@return to main() once valid entry received
*/

int main()
{
char y;

//call get_option to prompt for input
get_option(y);
//call test after user input is valid
test(y);

return 0;
}

void get_option(char &x)
{

cout << "Please enter an alphanumeric character: ";
cin >> x;

while (!(isdigit(x)||islower(x)||isupper(x)))
{
cout << "Please enter an alphanumeric character: ";
cin >> x;
}
}

string test(char y)
{
if (isupper(y))
{
cout << "An upper case letter is entered!";
} else if (islower(y)) {
cout << "A lower case letter is entered!";
} else if (isdigit(y)) {
cout << "A digit is entered!";
}
return "";
}

1

Решение

Я получил программу для работы отлично, изменив тип возврата test(char) функция:

#include <iostream>
#include <string>
#include <cctype>

using namespace std;

void get_option(char& input);
/**
Takes character entered user input and loops until correct answer
@param y character entered by user
@return to main() once valid entry received
*/
int test(char); //Changed from string to int
/**
Takes checks character entered user input and loops until correct answer
@param y alphanumeric character entered by user
@return to main() once valid entry received
*/

int main()
{
char y;

//call get_option to prompt for input
get_option(y);
//call test after user input is valid
test(y);

return 0;
}

void get_option(char &x)
{

cout << "Please enter an alphanumeric character: ";
cin >> x;

while (!(isdigit(x)||islower(x)||isupper(x)))
{
cout << "Please enter an alphanumeric character: ";
cin >> x;
}
}

int test(char y) //Also changed from string to int
{
if (isupper(y))
{
cout << "An upper case letter is entered!";
} else if (islower(y)) {
cout << "A lower case letter is entered!";
} else if (isdigit(y)) {
cout << "A digit is entered!";
}
return 0;
}

(Тестирование было на JDoodle используя компилятор C ++ 14.)
(Также протестировано с использованием Xcode. Все еще работает)

1

Другие решения

Когда я попробовал это в моей установке (g ++ 6.4, cygwin), я не получил никакого вывода. Когда я добавил << endl к выходным строкам вывод обнаружился.

Я подозреваю, что вы испытываете ту же проблему.

string test(char y)
{
if (isupper(y))
{
cout << "An upper case letter is entered!" << endl;  // Add endl
}
else if (islower(y))
{
cout << "A lower case letter is entered!" << endl;
}
else if (isdigit(y))
{
cout << "A digit is entered!" << endl;
}

// This does not make sense but it is syntactically valid.
return 0;
}

JiveDadson правильно. Проблема была в return 0 линия. Это вызывает неопределенное поведение. Изменение этой строки на

return "";

исправляет проблему вывода, endl или нет. Имея endl приятнее, но не обязательно. Исправление return утверждение является наиболее важной задачей.

0

По вопросам рекламы ammmcru@yandex.ru
Adblock
detector