7

関数を使用して非印刷文字を検出しisctrl()、%C指定子でprintfを使用して、たとえば'\ n'として印刷することは可能ですか?

または、たとえばif、すべての制御文字に対してを作成する必要がありprintf("\\n")ます。

OK、以下のすべての親切な人々に感謝します-それは不可能です、あなたはそれぞれの状況を指定しなければなりません。例:

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による回答を拡張するには、isprintとswitch-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 に答える