views:

70

answers:

4

Hi,

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.

+3  A: 

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.

Peter Alexander
string input; is enough, no need to initialize it.
Nikko
so now it accepts the no or yes but runs the else statement
Joseph
thanks, added the else if in the middle,
Joseph
@Nikko: Good point, don't know why I put that there.
Peter Alexander
A: 

string input; cin >> input;

if (input == "yes"){

} else if (input == "no"{

}

else { //blah }

James
+2  A: 

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.

Kiril Kirov
A: 
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';
  }
}
Roger Pate