我正在编写一个程序,使用打印输入的十六进制转储。但是,当传入换行符,制表符等并破坏输出格式时,我遇到了问题。
如何使用printf(或我猜测)来打印'\ n'而不是打印实际的换行符?我只需要为此进行一些手动解析吗?
编辑:我正在动态地接收我的数据,这不仅仅是我所关注的,而是所有符号。例如,这是我的printf语句:printf("%c", theChar);
当换行符作为theChar传入时,如何进行此打印\ n但是当theChar是有效的可打印字符时仍然使其打印正常文本?
答案 0 :(得分:37)
打印“\\ n” - “\\”生成“\”,然后“n”被识别为普通符号。有关详细信息,请参阅here。
答案 1 :(得分:22)
下面的函数printchar()
会将某些字符打印为“特殊”,并打印超出范围的字符的八进制代码(a la Emacs),否则打印普通字符。我还冒昧地让'\n'
打印出真实的'\n'
,以使您的输出更具可读性。另请注意,我在int
的循环中使用main
只是为了能够遍历unsigned char
的整个范围。在您的使用中,您可能只有unsigned char
从数据集中读取。
#include <stdio.h>
static void printchar(unsigned char theChar) {
switch (theChar) {
case '\n':
printf("\\n\n");
break;
case '\r':
printf("\\r");
break;
case '\t':
printf("\\t");
break;
default:
if ((theChar < 0x20) || (theChar > 0x7f)) {
printf("\\%03o", (unsigned char)theChar);
} else {
printf("%c", theChar);
}
break;
}
}
int main(int argc, char** argv) {
int theChar;
(void)argc;
(void)argv;
for (theChar = 0x00; theChar <= 0xff; theChar++) {
printchar((unsigned char)theChar);
}
printf("\n");
}
答案 2 :(得分:8)
只需使用“\\ n”(两个斜杠)
答案 3 :(得分:6)
您可以转义反斜杠,使其只打印正常的反斜杠:"\\n".
编辑:是的,你必须做一些手动解析。但是,这样做的代码只是一个搜索和替换。
答案 4 :(得分:5)
如果您想确保不打印任何不可打印的字符,那么您可以使用ctype.h
中的isprint
函数:
if( isprint( theChar ) )
printf( "%c", theChar )
else
switch( theChar )
{
case '\n':
printf( "\\n" );
break;
... repeat for other interesting control characters ...
default:
printf( "\\0%hho", theChar ); // print octal representation of character.
break;
}
答案 5 :(得分:4)
printf("\\n");
答案 6 :(得分:3)
答案 7 :(得分:3)
在C / C ++中,'\'字符被保留为转义字符。因此,无论何时想要实际打印'\',都必须输入'\'。因此,要打印实际的'\ n'值,您将打印以下内容:
printf("\\n");
答案 8 :(得分:1)
在调用printf之前,只需使用String::replace替换有问题的字符。
你可以将printf包装成这样的东西:
void printfNeat(char* str)
{
string tidyString(str);
tidyString.replace("\n", "\\n");
printf(tidyString);
}
...只需添加额外的替换语句即可摆脱其他不需要的字符。
[编辑] 或者如果您想使用参数,请尝试以下操作:
void printfNeat(char* str, ...)
{
va_list argList;
va_start(argList, msg);
string tidyString(str);
tidyString.replace("\n", "\\n");
vprintf(tidyString, argList);
va_end(argList);
}
答案 9 :(得分:1)
从C ++ 11开始,您还可以使用原始字符串
std::printf(R"(\n)");
R"(
和)"
内的所有内容都将按字面打印。转义序列将不会被处理。
答案 10 :(得分:-2)
这个问题有三种解决方案:
解决方案1: 每个符号,数字,字母都有自己的ASCII值。 '\'的ASCII值为92,'n'为110.立即值(数字(ASCII))存储在两个整数变量中。打印时,使用格式说明符%c(字符)。
void main() {
int i=92, j=110;
clrscr();
printf("%c%c", i, j);
getch();
}
在C编程软件中试用......
解决方案2:
程序有效。但我觉得这个不公平...... 在输出屏幕上,键入输入为\ n ... 你会得到另一个\ n ..
void main() {
char a[10];
gets(a);
printf("\n\n\n\n");
puts(a);
getch();
}
试用程序
解决方案3: 上面已经说过了\ n