Цель этой программы — проверить, является ли введенный пользователем символ буквенно-цифровым. Как только функция 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 "";
}
Я получил программу для работы отлично, изменив тип возврата 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. Все еще работает)
Когда я попробовал это в моей установке (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
утверждение является наиболее важной задачей.