using user input such as YES and NO to control program flow in C++

左心房为你撑大大i 提交于 2019-12-24 07:54:19

问题


I'm making a small program that uses a if else statement, but instead of using numbers to control the flow i want to be able to make the control work with with yes and no;

for example:

cout << "would you like to continue?" << endl;
cout << "\nYES or NO" << endl;
int input =0;
cin >> input;
string Yes = "YES";
string No = "NO";

if (input == no)
{
    cout << "testone" << endl;
}
if (input == yes)
{
    cout << "test two" << endl;
         //the rest of the program goes here i guess?
}
else
{
    cout <<  "you entered the wrong thing, start again" << endl;
              //maybe some type of loop structure to go back
}

but I can't seem to get any variations of this to work, i could make the user type a 0 or 1 instead but that seems really stupid, i'd rather it be as natural as possible, users don't speak numbers do they?

also i need to be able to simply add more words, for example "no NO No noo no n" all would have to mean no

hopefully that makes some sense

also i would love to make this using a window but i've only learned basic c++ so far not even that and i cant find any good resources online about basic windows programming.


回答1:


You're not reading in a string, you're reading in an int.

Try this:

string input;

instead of

int input = 0;

Also, C++ is case-sensitive, so you can't define a variable called Yes and then try to use it as yes. They need to be in the same case.

btw, your second if statement should be an else if, otherwise if you type in "NO" then it will still go into that last else block.




回答2:


First of all, input must be std::string, not int.

Also, you've written yes and no wrong:

             v
if (input == No)
// ..
//                v
else if (input == Yes)
^^^^

If you want your program to work with "no no no ..", you could use std::string::find:

if( std::string::npos != input.find( "no" ) )
// ..

The same with "Yes".

Also, you could do this to be almost case-insensitive - transform the input to upper-case letters (or lower, whatever ), and then use find.This way, yEs will be still a valid answer.




回答3:


bool yesno(char const* prompt, bool default_yes=true) {
  using namespace std;
  if (prompt && cin.tie()) {
    *cin.tie() << prompt << (default_yes ? " [Yn] " : " [yN] ");
  }
  string line;
  if (!getline(cin, line)) {
    throw std::runtime_error("yesno: unexpected input error");
  }
  else if (line.size() == 0) {
    return default_yes;
  }
  else {
    return line[0] == 'Y' || line[0] == 'y';
  }
}



回答4:


string input;
cin >> input;
if (input == "yes"){

}
else if (input == "no"{

}

else {
    //blah
}


来源:https://stackoverflow.com/questions/4062947/using-user-input-such-as-yes-and-no-to-control-program-flow-in-c

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!