Velocity Reviews - Computer Hardware Reviews

Velocity Reviews > Newsgroups > Programming > C Programming > isdigit

Reply
Thread Tools

isdigit

 
 
mdh
Guest
Posts: n/a
 
      10-06-2006
Could I get some help as to understanding why I am not getting a result
I expect.


#include <stdio.h>
#include <ctype.h>

int main (){
int i,j,k,c;
i=9;
c='A';


j=isdigit(9);
k=isdigit('A');


printf("\nThe value of \"isdigit(%d)\" is %d", i,j);
printf("\nAnd the value of \"isdigit('%c')\" is %d\n", c,k);

return 0;
}



Output:

The value of "isdigit(9)" is 0
And the value of "isdigit('A')" is 0

Expected:

The value of "isdigit(9)" is 0
And the value of "isdigit('A')" is 1

 
Reply With Quote
 
 
 
 
Neil
Guest
Posts: n/a
 
      10-06-2006
mdh wrote:
> Could I get some help as to understanding why I am not getting a result
> I expect.
>
>
> #include <stdio.h>
> #include <ctype.h>
>
> int main (){
> int i,j,k,c;
> i=9;
> c='A';
>
>
> j=isdigit(9);
> k=isdigit('A');
>
>
> printf("\nThe value of \"isdigit(%d)\" is %d", i,j);
> printf("\nAnd the value of \"isdigit('%c')\" is %d\n", c,k);
>
> return 0;
> }
>
>
>
> Output:
>
> The value of "isdigit(9)" is 0
> And the value of "isdigit('A')" is 0
>
> Expected:
>
> The value of "isdigit(9)" is 0
> And the value of "isdigit('A')" is 1
>

'A' is not a digit
9 is not a digit

'9' is a digit
 
Reply With Quote
 
 
 
 
Cong Wang
Guest
Posts: n/a
 
      10-06-2006


On Oct 6, 2:02 pm, "mdh" <(E-Mail Removed)> wrote:
> Could I get some help as to understanding why I am not getting a result
> I expect.
>
> #include <stdio.h>
> #include <ctype.h>
>
> int main (){
> int i,j,k,c;
> i=9;
> c='A';
>
> j=isdigit(9);
> k=isdigit('A');
>
> printf("\nThe value of \"isdigit(%d)\" is %d", i,j);
> printf("\nAnd the value of \"isdigit('%c')\" is %d\n", c,k);
>
> return 0;
>
> }Output:
>
> The value of "isdigit(9)" is 0
> And the value of "isdigit('A')" is 0
>
> Expected:
>
> The value of "isdigit(9)" is 0
> And the value of "isdigit('A')" is 1


Do you consider 'A' as a hexadecimal digit? If so, use function
isxdigit() instead of isdigit().

 
Reply With Quote
 
mdh
Guest
Posts: n/a
 
      10-06-2006

> 'A' is not a digit
> 9 is not a digit
>
> '9' is a digit



it's getting late...thank you

 
Reply With Quote
 
Rnags
Guest
Posts: n/a
 
      10-06-2006
Answer; Since c is a integer variable,when we try to store the
charecter in the integer variable Ascii value of that charecter is
stored in the variable,since Ascii value of the charecter is also digit
hence the isdigit()
function returns true

 
Reply With Quote
 
shafi
Guest
Posts: n/a
 
      10-14-2006
> j=isdigit(9);
> k=isdigit('A');


Hi,
The isdigit() function takes an argument of character type or EOF and
it return non zero value if
the passing argument is characters '0' , '1' . . . '9' else it returns
zero.
Now consider your actual out put.

1. The first part of the out put is true as you have supplied wrong
argument i.e. a integer
insite of supplying char.
2. Second part is also true. No need to explain.

Regards,
Shafi

"the difficult we do immediately, the impossible takes a little
longer", [US Army

 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      10-14-2006
"shafi" <(E-Mail Removed)> writes:
>> j=isdigit(9);
>> k=isdigit('A');

>
> The isdigit() function takes an argument of character type or EOF and
> it return non zero value if
> the passing argument is characters '0' , '1' . . . '9' else it returns
> zero.


More precisely,

... the argument is an int, the value of which shall be
representable as an unsigned char or shall equal the value of the
macro EOF. If the argument has any other value, the behavior is
undefined.

This is an important distinction. Something like this:

char c = some_value;
isdigit(c);

can invoke undefined behavior if (1) plain char is signed, and (2) the
value of c is negative (and not equal to EOF). For arguments other
than EOF, it's often a good idea to cast the argument:

char c = some_value;
isdigit((unsigned char)c);

(This is one of the few cases where a cast is actually a good idea.)

Or, in this case, you could avoid the cast by changing the declaration
of c:

unsigned char c = some_value;
isdigit(c);

--
Keith Thompson (The_Other_Keith) http://www.velocityreviews.com/forums/(E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
Andrew Poelstra
Guest
Posts: n/a
 
      10-14-2006
On Fri, 2006-10-13 at 22:22 -0700, shafi wrote:
> > j=isdigit(9);
> > k=isdigit('A');

>
> Hi,
> The isdigit() function takes an argument of character type or EOF and
> it return non zero value if
> the passing argument is characters '0' , '1' . . . '9' else it returns
> zero.


isdigit(c) function takes an argument of type int that must be in the
range of unsigned char or EOF. It returns nonzero on '0'...'9',
otherwise returns 0.

> Now consider your actual out put.
>
> 1. The first part of the out put is true as you have supplied wrong
> argument i.e. a integer
> insite of supplying char.


Wrong. 9 is in the range of unsigned char, and therefore is perfectly
valid. Whether the expression evaluates to true or not depends on the
charset.

> 2. Second part is also true. No need to explain.
>


Wrong. 'A' is not a digit.

--
Andrew Poelstra <http://www.wpsoftware.net/projects/>

 
Reply With Quote
 
pete
Guest
Posts: n/a
 
      10-14-2006
Andrew Poelstra wrote:
>
> On Fri, 2006-10-13 at 22:22 -0700, shafi wrote:
> > > j=isdigit(9);
> > > k=isdigit('A');

> >
> > Hi,
> > The isdigit() function takes an argument
> > of character type or EOF and
> > it return non zero value if
> > the passing argument is characters
> > '0' , '1' . . . '9' else it returns zero.

>
> isdigit(c) function takes an argument of type int that must be in the
> range of unsigned char or EOF. It returns nonzero on '0'...'9',
> otherwise returns 0.
>
> > Now consider your actual out put.
> >
> > 1. The first part of the out put is true as you have supplied wrong
> > argument i.e. a integer
> > insite of supplying char.

>
> Wrong. 9 is in the range of unsigned char, and therefore is perfectly
> valid. Whether the expression evaluates to true or not depends on the
> charset.


It doesn't depend on the char set.
isdigit is one of the ctype functions
that does not have locale specific behavior.

--
pete
 
Reply With Quote
 
Keith Thompson
Guest
Posts: n/a
 
      10-14-2006
pete <(E-Mail Removed)> writes:
> Andrew Poelstra wrote:

[...]
>> Wrong. 9 is in the range of unsigned char, and therefore is perfectly
>> valid. Whether the expression evaluates to true or not depends on the
>> charset.

>
> It doesn't depend on the char set.
> isdigit is one of the ctype functions
> that does not have locale specific behavior.


The value of isdigit(9) depends on the character encoding, which can
vary from one implementation implementation to another. (I don't know
whether "char set" is the right term for this.)

I believe it returns 0 on all existing implementations, but 9 could
theoretically be the encoding for some digit (but it can't be the
encoding for '9', since the digits are contiguous and '\0' can't be a
digit).

--
Keith Thompson (The_Other_Keith) (E-Mail Removed) <http://www.ghoti.net/~kst>
San Diego Supercomputer Center <*> <http://users.sdsc.edu/~kst>
We must do something. This is something. Therefore, we must do this.
 
Reply With Quote
 
 
 
Reply

Thread Tools

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

BB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are Off


Similar Threads
Thread Thread Starter Forum Replies Last Post
Re: print problem using isDigit Donkey Hottie Java 4 09-29-2008 06:39 PM
We have string.isdigit(), why not string.isNumber()? MooMaster Python 2 05-01-2008 01:04 AM
Character.isDigit malfunction soup_or_power@yahoo.com Java 9 02-09-2007 02:36 PM
passing array to isdigit() Carramba C Programming 15 02-21-2005 10:55 AM
isdigit() for characters greater than 127 Alf P. Steinbach C++ 4 10-09-2004 06:37 AM



Advertisments