是否可以使用函数来检测非打印字符,isctrl()并使用带有%C说明符的printf将它们打印为'\n'?
或者我应该if为每个控制角色写一个printf("\\n"),例如..?
好的,感谢下面的所有人 - 这是不可能的,你必须指定每种情况.例:
if (isctrl(char))// WRONG
printf("%c", char);
if (char == '\n')//RIGHT, or using switch.
printf("\\n");
Run Code Online (Sandbox Code Playgroud)
Ani*_*nge 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++;
}
Run Code Online (Sandbox Code Playgroud)
这将打印不可打印的字符.
要扩展Aniket的答案,您可以使用isprintswitch和语句解决方案的组合:
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;
}
}
Run Code Online (Sandbox Code Playgroud)