7

是否可以使用函数来检测非打印字符isctrl()并使用带有 %C 说明符的 printf 将它们打印为 '\n' 例如?

或者我应该if为每个控制字符写一个printf("\\n"),例如..?

好的,感谢下面所有的好心人 - 这是不可能的,您必须指定每种情况。例子:

if (isctrl(char))// WRONG
 printf("%c", char);

if (char == '\n')//RIGHT, or using switch. 
 printf("\\n");
4

3 回答 3

11
const char *pstr = "this \t has \v control \n characters";
char *str = pstr;
while(*str){
   switch(*str){
     case '\v': printf("\\v");break;
     case '\n': printf("\\n"); break;
     case '\t': printf("\\t"); break;
     ...
     default: putchar(*str);break;
   }
   str++;
}

这将打印不可打印的字符。

于 2013-02-01T14:06:28.573 回答
9

要扩展 Aniket 的答案,您可以结合使用isprintswitch-statement 解决方案:

char ch = ...;

if (isprint(ch))
    fputc(ch, stdout);  /* Printable character, print it directly */
else
{
    switch (ch)
    {
    case '\n':
        printf("\\n");
        break;

    ...

    default:
        /* A character we don't know, print it's hexadecimal value */
        printf("\\x%02x", ch);
        break;
    }
}
于 2013-02-01T14:12:07.073 回答
1

你可以确定非打印字符,但我不这么认为,你可以写那些字符。您可以通过观察它们的 ASCII 值来检测特定的非打印字符。

于 2013-02-01T14:09:07.267 回答