By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
446,276 Members | 1,951 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 446,276 IT Pros & Developers. It's quick & easy.

printing all escape sequence characters

P: n/a
consider the following program

/************************************************** **/
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int c;

for (c = '\a'; c <= '\z'; c++)
printf("%c %d\n", c, (int)c);

exit(EXIT_SUCCESS);
}

/************************************************** ****/

here I am trying to print all escape sequences (well, most of them are
illegal).

the output is
----------------------------------------
7
8
9

10

11

12
13
14
15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 27
 28
 29
 30
 31
32
! 33
" 34
# 35
$ 36
% 37
& 38
' 39
( 40
) 41
* 42
+ 43
, 44
- 45
.. 46
/ 47
0 48
1 49
2 50
3 51
4 52
5 53
6 54
7 55
8 56
9 57
: 58
; 59
< 60
= 61
62
? 63
@ 64
A 65
B 66
C 67
D 68
E 69
F 70
G 71
H 72
I 73
J 74
K 75
L 76
M 77
N 78
O 79
P 80
Q 81
R 82
S 83
T 84
U 85
V 86
W 87
X 88
Y 89
Z 90
[ 91
\ 92
] 93
^ 94
_ 95
` 96
a 97
b 98
c 99
d 100
e 101
f 102
g 103
h 104
i 105
j 106
k 107
l 108
m 109
n 110
o 111
p 112
q 113
r 114
s 115
t 116
u 117
v 118
w 119
x 120
y 121
z 122
--------------------------------------------------

after executing the program I can hear my CPU speaker give away "beep"
sound. This indicates (i presume) that '\a' is outputted correctly. But
what about the other characters that are outputted.

I am using gcc 4.1 on linux.

Oct 28 '06 #1
Share this Question
Share on Google+
5 Replies


P: n/a
On Sat, 2006-10-28 at 05:25 -0700, chandanlinster wrote:
consider the following program

/************************************************** **/
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int c;

for (c = '\a'; c <= '\z'; c++)
printf("%c %d\n", c, (int)c);

exit(EXIT_SUCCESS);
}

/************************************************** ****/
Oh my. This is the most interestingly incorrect algorithm I have seen
in a long while. Congratulations. :-)

Your fatal flaw is that the sequences '\a' to '\z' are /not/ guaranteed
to be in contiguous order, and they almost certainly will not be in real
life. (I'm not even sure of the consequences of using invalid escape
sequences like '\q'.)

A better algorithm would be:
1. Take a good C book.
2. Locate the page with the table of escape sequences.
3. Scan it.
4. Switch to Algorithm O (optical character recognition)

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

Oct 28 '06 #2

P: n/a

chandanlinster wrote:
after executing the program I can hear my CPU speaker give away "beep"
sound. This indicates (i presume) that '\a' is outputted correctly. But
what about the other characters that are outputted.

I am using gcc 4.1 on linux.
There are several books and websites that explain what each escape
characters does.

Oct 28 '06 #3

P: n/a
On 28 Oct 2006 05:25:27 -0700, "chandanlinster"
<ch************@gmail.comwrote:
>consider the following program

/************************************************** **/
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int c;

for (c = '\a'; c <= '\z'; c++)
Didn't your compiler complain that '\z' is an invalid escape sequence
(syntax error)?

By the way, '\n' in ASCII is 0x0a while '\t' is 0x09 so it is obvious
they need not run in order.

You might have more luck using 0 and CHAR_MAX as your limits.
> printf("%c %d\n", c, (int)c);
c is already an int. What do you think the cast accomplishes? Even
if c were a char, for unspecified arguments to a variadic function
char (and short) is always promoted to int. (And float is promoted to
double.)
>
exit(EXIT_SUCCESS);
}

/************************************************** ****/

here I am trying to print all escape sequences (well, most of them are
illegal).
Consider yourself lucky that one of them doesn't mean format your hard
drive.
>
the output is
----------------------------------------
7
8
9

10

11

12
13
14
15
 16
snip
> 31
32
! 33
" 34
# 35
$ 36
% 37
& 38
' 39
( 40
) 41
* 42
+ 43
, 44
- 45
. 46
/ 47
0 48
snip
>9 57
: 58
; 59
< 60
= 61
>62
? 63
@ 64
A 65
snip
>Z 90
[ 91
\ 92
] 93
^ 94
_ 95
` 96
a 97
snip
>z 122
--------------------------------------------------

after executing the program I can hear my CPU speaker give away "beep"
sound. This indicates (i presume) that '\a' is outputted correctly. But
what about the other characters that are outputted.
Well, the value 9 appeared to tab over consistent with its definition
as horizontal tab. The value 8 should have backspaced but I'll bet
your system swallowed it because it knew you were at the beginning of
a line. The value 10 did produce a new line consistent with its
definition as line feed. So did values 11 and 12 which I guess is one
of the valid interpretations of vertical tab and form feed as it
applies to displays. Values 16-31 are apparently unprintable which is
consistent with their definitions.

What did you expect? What is your real question?
>
I am using gcc 4.1 on linux.

Remove del for email
Oct 28 '06 #4

P: n/a

"Barry Schwarz" <sc******@doezl.netha scritto nel messaggio
news:1d********************************@4ax.com...
On 28 Oct 2006 05:25:27 -0700, "chandanlinster"
<ch************@gmail.comwrote:
consider the following program

/************************************************** **/
#include <stdio.h>
#include <stdlib.h>

int
main(void)
{
int c;

for (c = '\a'; c <= '\z'; c++)

Didn't your compiler complain that '\z' is an invalid escape sequence
(syntax error)?

By the way, '\n' in ASCII is 0x0a while '\t' is 0x09 so it is obvious
they need not run in order.

You might have more luck using 0 and CHAR_MAX as your limits.
printf("%c %d\n", c, (int)c);

c is already an int. What do you think the cast accomplishes? Even
if c were a char, for unspecified arguments to a variadic function
char (and short) is always promoted to int. (And float is promoted to
double.)
Not always.

If char is "unsigned" and int cannot represent all values of "unsigned char"
char is promoted to unsigned int, signed char is always
promoted to int.

--
Giorgio Silvestri
DSP/Embedded/Real Time OS Software Engineer

Oct 28 '06 #5

P: n/a
Barry Schwarz wrote:
>
On 28 Oct 2006 05:25:27 -0700, "chandanlinster"
<ch************@gmail.comwrote:
consider the following program
[...]
for (c = '\a'; c <= '\z'; c++)
[...]
printf("%c %d\n", c, (int)c);
[...]
What did you expect? What is your real question?
[...]

I think he expected c to loop as:

'\a'
'\b'
'\c'
'\d'
...
'\x'
'\y'
'\z'

--
+-------------------------+--------------------+-----------------------+
| Kenneth J. Brody | www.hvcomputer.com | #include |
| kenbrody/at\spamcop.net | www.fptech.com | <std_disclaimer.h|
+-------------------------+--------------------+-----------------------+
Don't e-mail me at: <mailto:Th*************@gmail.com>

Oct 31 '06 #6

This discussion thread is closed

Replies have been disabled for this discussion.