• Advertisement
Sign in to follow this  

handeling int's being put in as letters...

This topic is 4837 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

right...so here is a code:
#include <iostream.h>
#include <stdlib.h>

int main()
{
  int a;
  while (a != 1) {
    system("CLS");
    std::cout << "Please enter 1" << std::endl;
    std::cin >> a;
    if (a >= 2 || a <= 0) {
      std::cout << "Error...please enter 1!" << std::endl;
      system("PAUSE");
    }
  }
  std::cout << "Thank you!" << std::endl << std::endl;
  system("PAUSE");
  return 0;
}
 
very simple...my question is...how do i make an if statment to handel if the person running it would put in, say, "a"... when i do test it and put in "a" then it just goes freaky and i have to close out of the actual program... thanks! -Ajain

Share this post


Link to post
Share on other sites
Advertisement
Guest Anonymous Poster
The simplest way is to synch the stream and clear all errors before reading.


std::cin.sync();
std::cin.clear();
if(std::cin >> a)
{
// valid input
}
else
{
// invalid input
}


Share this post


Link to post
Share on other sites
I don't get it...? what is that? I plugged it into the program both directly before and directly after the input but it still doesn't do anything...

thanks but...

-Ajain

Share this post


Link to post
Share on other sites
I think what the anonymous poster was trying to say is that cin returns a bool. True means that the input was valid, false means that it is invalid. If you put the call cin in a conditional statement, you can test whether it was successful or not.

Share this post


Link to post
Share on other sites
Instead of making a int, make it char. Now if you check the ASCII table you'll see that '1' equals 49.

Explanation: a char is actually a value converted to a sign by the console. So if you set a char to 49 without quotes it will become '1' as a character. But if you put 1 without quotes, you'll get SOH-character which is of no use.

In C++ you can check chars with singlequotes '1' or with the int-value which is 49.

char a;
cin >> a;

if(a == '1' && a == 49) {
// Yes! It rocks!
}



Note: with character-strings (char*) it does not work. You'll need to use a function like atol() to convert the character-string to an integer. But in your example, you're only checking a single-digit number, so my above example should work in this case.

Share this post


Link to post
Share on other sites
Here's how I would do it.

char input;
int a = 0;
while(a != 1) {
...std::cin >> input; // Read character in. WARNING: the input should probably be a character array, to prevent more than one character being entered.
...a = atoi(input); // Convert first character to a number.
}

Share this post


Link to post
Share on other sites
1) include <iostream> and <cstdlib>. iostream.h is depreciated, and cstdlib is the C++ version of stdlib.h. (you will need to either fully qualify the namespace, or stick a using namespace std; right after the header includes)
2) you need to initialize a, right now it could contain anything, even a 1.

#include <iostream>
#include <cstdlib>
#include <string>

//this:
using std::cin;
using std::string;
using std::system;
//or this:
//using namespace std;

int main() {
int a = 0; //initialized to 0
while(a != 1) {
while(!(cin>>a)) { //while the stream is not good (aka, they enter in a character)
string chuckable;
cin.clear(); //clears the error flags, returns the stream to a readable state
cin>>chuckable; //will read up to the next whitespace.
}
//... your code here...
}
}

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement