printing all escape sequence characters

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • chandanlinster

    #1

    printing all escape sequence characters

    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_SUCCE SS);
    }

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

    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.

  • Andrew Poelstra

    #2
    Re: printing all escape sequence characters

    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_SUCCE SS);
    }
    >
    /*************** *************** *************** *********/
    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/>

    Comment

    • backasswards

      #3
      Re: printing all escape sequence characters


      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.

      Comment

      • Barry Schwarz

        #4
        Re: printing all escape sequence characters

        On 28 Oct 2006 05:25:27 -0700, "chandanlinster "
        <chandanlinster @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_SUCCE SS);
        >}
        >
        >/*************** *************** *************** *********/
        >
        >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

        Comment

        • Giorgio Silvestri

          #5
          Re: printing all escape sequence characters


          "Barry Schwarz" <schwarzb@doezl .netha scritto nel messaggio
          news:1d77k2t64g 08s38rq13sd6trc hjv6jvk6v@4ax.c om...
          On 28 Oct 2006 05:25:27 -0700, "chandanlinster "
          <chandanlinster @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



          Comment

          • Kenneth Brody

            #6
            Re: printing all escape sequence characters

            Barry Schwarz wrote:
            >
            On 28 Oct 2006 05:25:27 -0700, "chandanlinster "
            <chandanlinster @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:ThisIsA SpamTrap@gmail. com>

            Comment

            Working...