Checking Digit Range in C++ - Any Suggestions?

  • C/C++
  • Thread starter madmike159
  • Start date
  • Tags
    C++
In summary: It's not doing any good, and it's potentially doing harm (because if NumPlayers is negative, then it will pass the isdigit test even if it's not a digit).The correct test is to make sure that the input succeeded, and that the input was in range. That's two tests, not one.
  • #1
madmike159
Gold Member
371
0
I want the user to enter a number from 1 to 9, then check its in that range and a number.
This is the code I have, but its not working.
Code:
	int NumPlayers = 0;
	do
	{
		cout << "Please enter a interger from 1 to 9." << endl;
		cin >> NumPlayers;
	}
	while(isdigit(NumPlayers)  && (1 <= NumPlayers <= 9));

Any Suggestions?
 
Technology news on Phys.org
  • #2
madmike159 said:
Any Suggestions?
Print statements!
print out NumPlayers and your logic and see that everything is evaluating as it should be.

Also, it's been a while, but I'm pretty sure you can't do:
(1 <= NumPlayers <= 9)

You have to break it up:
((1<=NumPlayers) && (NumPlayers<=9))
 
  • #3
In situations like this, it's instructive to insert code that displays your input and the results of your tests explicitly:

Code:
int NumPlayers = 0;
do
{
    cout << "Please enter a interger from 1 to 9." << endl;
    cin >> NumPlayers;
    cout << "You entered " << NumPlayers << "." << endl;
    if (isdigit(NumPlayers))
        cout << "NumPlayers is a digit." << endl;
    if (NumPlayers >= 1)
        cout << "NumPlayers is >= 1." << endl;
    if (NumPlayers <= 9)
        cout << "NumPlayers is <= 9." << endl;
}
while(isdigit(NumPlayers)  && (1 <= NumPlayers) && (NumPlayers <= 9));

This technique often enables you to find the solution faster than by posting to the Internet and waiting for responses. :smile:
 
  • #4
or better yet, use a debugger.
Set a breakpoint at the top, set watches on the variables you are interested in and then step through each line.
 
  • #5
madmike159 said:
but its not working.

Just another tip: In general, it really really helps people if you say exactly what you mean by "not working."

Does the program fail to compile? If so, what error messages did you get?

Does the program seem to compile OK, but doesn't give correct results when it runs? If so, what results did you expect and what did you actually get?

Or did your monitor screen melt down, or did you get electric shocks to your fingers through the keyboard, or...? :uhh:
 
  • #6
Ok thanks, I'll remember that next time. I fixed the problem now. Thanks for the help.
 
  • #7
madmike159 said:
Code:
(1 <= NumPlayers <= 9)

Actually this is a correct expression :wink:
 
  • #8
Borek said:
Actually this is a correct expression :wink:

I wonder if the compiler optimizes it to if(true) { ... }
 
  • #9
The user interface of your program --
Code:
cout << "Please enter a interger from 1 to 9." << endl;
-- could use some editing. Note spelling of integer.

"Please enter an integer from 1 to 9."

To expand on what Borek and DavidSnyder said, the expression 1 <= NumPlayers <= 9 always evaluates to true, regardless of the value of NumPlayers.

This expression is evaluated as if it were written as ((1 <= NumPlayers) <= 9).

The logical expression 1 <= NumPlayers will evaluate to true (1) or false (0), depending on the value of NumPlayers.

The expressions (0 <= 9) and (1 <= 9) both evaluate to true (1).

The moral of the story is that the continued inequality that is used in mathematics is syntactically correct but semantically incorrect in all programming languages based on C.
 
  • #10
In addition to all problems already mentioned, the call to isdigit() does not do what you think it does.

isdigit() is normally called with a 'char' parameter and it returns nonzero if the parameter is between '0' and '9' (or, in ASCII, between 0x30 and 0x39). Your NumPlayers is an 'int'. Therefore it will already have been converted from char to integer. There's no need to call isdigit.
 

1. What is a checking digit in C++?

A checking digit is a special number added to a sequence of digits to help detect errors in the input or transmission of data. It is commonly used in numerical systems, such as credit card numbers and barcodes, to ensure accuracy and prevent fraud.

2. How is the checking digit calculated in C++?

The calculation of a checking digit in C++ varies depending on the specific algorithm or formula being used. Generally, it involves performing mathematical operations on the other numbers in the sequence, such as adding, multiplying, or using a modulus function.

3. Why is it important to check the digit range in C++?

Checking the digit range is important because it ensures that the input data is within a valid and expected range. This helps to prevent errors and incorrect data from being processed, which can have significant consequences in critical systems or applications.

4. What are some common methods for checking digit range in C++?

Some common methods for checking digit range in C++ include using conditional statements, loops, and mathematical functions. These can be combined with error handling techniques to handle unexpected inputs and ensure the checking digit is within the desired range.

5. Are there any built-in libraries or functions in C++ for checking digit range?

Yes, there are several built-in libraries and functions in C++ that can be used for checking digit range, such as the isdigit() function in the cctype library. Additionally, there are many third-party libraries and algorithms available for more specific or complex checking digit calculations.

Similar threads

  • Programming and Computer Science
Replies
12
Views
1K
Replies
52
Views
4K
  • Programming and Computer Science
Replies
6
Views
8K
  • Programming and Computer Science
Replies
8
Views
2K
  • Programming and Computer Science
Replies
5
Views
2K
  • Programming and Computer Science
Replies
23
Views
2K
  • Programming and Computer Science
2
Replies
66
Views
4K
  • Programming and Computer Science
Replies
12
Views
1K
  • Programming and Computer Science
Replies
30
Views
2K
Replies
10
Views
960
Back
Top