Trivial C question: iterating through chars

Robert G. Brown rgb at phy.duke.edu
Fri Apr 20 09:09:46 PDT 2001


On Fri, 20 Apr 2001, Chris Richard Adams wrote:

> I'd like to view all the ASCII chars on my system.  I tried:
>
> char ch = 'NUL';
> int i;
>
> for ( i = 0; i < 500; i++)
> 	printf("Char: %c/n", ch + i");
>
> This fails.

Simple/trivial errors.  Extra ", backwards /n, 'NUL' should just be 0 or
NULL, int + char casts to int, not char, so you need a cast to char
which means that you might as well not bother with a char at all,
dadada....

Try:

 int i;

 for(i=0;i<256;i++) printf("Char[%d] = %d\n",i,(char)i);

is much easier and works charmlike.  Note that going higher than 255 is
not useful if char is a single byte, as it is on many systems.  ASCII in
any event is only 0-255.  Note that this will probably make your screen
beep when you run it and will generate a bit of garbage when you hit
control characters that don't really print.

For fun you can do this with the following perl one-liner:

perl -e 'for($i=0;$i<256;$i++){printf("Char[%d]: %c\n",$i,$i ) }'

which saves the effort of compile and so forth.  Note that the perl is
nearly identical to the C except you don't really need the cast (you
probably don't in C either but the compiler will complain if you don't
and MIGHT not work -- haven't tried it).

   rgb

-- 
Robert G. Brown	                       http://www.phy.duke.edu/~rgb/
Duke University Dept. of Physics, Box 90305
Durham, N.C. 27708-0305
Phone: 1-919-660-2567  Fax: 919-660-2525     email:rgb at phy.duke.edu







More information about the Beowulf mailing list