c primer plus编程练习习题的问题。关于重定向的问题

编写一个程序,在遇到EOF之前,把输入作为字符流获取。程序要打印每个输入的字符及其相应的ASCII十进制值,注意,在ASCII序列中,空格字符前面的字符都是非打印字符,要特殊处理,使用控制字符变量法,例如ASCII的1是Ctrl+A,可显示^A。A的ASCII值是Ctrl+A的值加上64。
问:
这里怎么使得dos显示^A.怎么使用控制字符变量法

#include <stdio.h>

int main()
{
    char ch;
    while ((ch = getchar()) != EOF)
    {
        if (ch < 32)
            printf("^%c %3d\n", '@' + ch, (int)ch);
        else if (ch == 127)
            printf("^? %3d\n", (int)ch);
        else
            printf("%2c %3d\n", ch, (int)ch);
    }
    return 0;
}