В предыдущих вопросах я задавал вопрос о том, как получить несколько строковых входов для управления потоком программы, используя операторы if else. и все работало нормально.
код для ДА и НЕТ фантастический, и я очень рад, за исключением того, что я построил тестовую установку в форме функции, которая вызывается снова и снова, если пользователь не вводит команду exit.
Причина, по которой я это сделал, состояла в том, чтобы я мог просто попробовать все разные комбинации слов, чтобы увидеть, насколько прочен std :: string, каковы ограничения и тому подобное. единственная проблема заключается в том, что после однократного повторения кода (он возвращается к основному и снова входит в функцию YESNO), затем ввод переходит к части «да» или «нет», как и предполагалось, но вместо того, чтобы зацикливаться второй или третий раз, когда программа закрывается.
вот код:
#include <iostream>
#include <algorithm>
#include <cctype>
#include <string>
//the above headers are for the control flow code (transforms i think)
using namespace std;
int YESNO (int var);
int main()
{
int loop=0;
if (loop == 0)
{
YESNO(0);
loop=YESNO(0);
}
else
{
cout << "\n " << endl;
}
return 0;
}
int YESNO (int var)
{
cout << "This is a simple yes or no program control flow test" << endl;
cout << "Please enter yes or no in different ways to test the code, many thanks!!!" << endl;
cout << "\nYES or NO or exit?" << endl;
string input ="";
cin >> input;
//all good, the above i know how todo
transform (input.begin(), input.end(), input.begin(), tolower);
if ((std::string::npos != input.find( "yes" )) || (std::string::npos != input.find( "y")) )
{
cout << "You entered yes!! " << endl;
}
else if ((std::string::npos != input.find( "no" )) || (std::string::npos != input.find( "n")) )
{
cout << "You entered no!! " << endl;
}
else if (std::string::npos != input.find( "exit" ))
{
var=1;
}
else
{
cout << "ERROR REPEAT..........!!!" << endl;
var=0;
}
return(var);
}
Идея заключалась в том, что, как только пользователь вводит да или нет, функция автоматически повторяется, так что пользователь (я) может снова ввести да или нет, чтобы увидеть, как далеко мы можем нажать std :: string, и ввод exit приведет к программа не зацикливается, поскольку цикл больше не будет равен 0, и программа закроется.
Цикл работает, но функция не работает должным образом, и после запуска cout для правильного ответа она начинает существовать.