如何打印'\ n'而不是换行符?
我正在写一个程序,使用它的输入打印一个十六进制转储。然而,当新行,制表符等被传入并破坏我的输出格式时,我遇到了问题。如何打印' n'而不是换行符?
如何使用printf(或猜测我想)打印'\ n'而不是打印实际的换行符?我只需要为此做一些手动解析?
编辑:我正在动态地接收我的数据,这不仅仅是我关于它的\ n,而是所有的符号。例如,这是我的printf语句:
printf("%c", theChar);
我怎样才能让这个打印\ n当一个换行符传递作为theChar但仍使其打印普通文本时theChar是一个有效的可打印字符?
可以逃避反斜杠,使其打印只是一个普通的反斜杠:"\\n".
编辑:是的,你就必须做一些手工解析。但是,这样做的代码只是搜索和替换。
只要使用 “\\ N”(双斜杠)
printf("\\n");
只需使用String::replace你调用printf之前更换有问题的字符。
你可以换行的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);
}
这不是std :: basic_string :: replace的工作原理。从http://en.cppreference.com/w/cpp/string/basic_string/replace中我们可以看到替换`将替换[pos,pos + count)或[first,last)'中指定的字符串部分一个新的字符串。它不搜索原始字符串并替换找到的事件。 – Jon 2016-01-28 00:44:16
了以下功能printchar()
将打印一些字符为“特殊”,并打印字符的八进制代码超出范围(a la Emacs),否则打印正常字符。为了让输出更具可读性,我还冒昧地在'\n'
之后打印一个真实的'\n'
。另外请注意,我在main
的循环中使用int
只是为了能够遍历整个范围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");
}
+1:好主意 127 catch – 2009-07-03 15:20:06
如果你想确保你没有打印任何非打印字符,那么您可以在使用功能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;
}
在C/C++中,'\'字符被保留为转义字符。所以,只要你想打印一个'\',你就必须输入'\'。因此,要打印的实际“\ n”值,你将打印以下:
printf("\\n");
有此问题的三种解决方案:
解决方案1: 每一个符号,数字,字母都有自己的ASCII值。 '\'的ASCII值为92,'n'为110.直接值(Numbers(ASCII))存储在两个整数变量中。打印时,使用格式说明符%c(Character)。
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已经说过
由于C++ 11,你也可以使用原始字符串
std::printf(R"(\\n)");
一切内0123字面上打印和)"
。转义序列不会被处理。
请记住,对printf(“%c”,foo)的单个调用无法输出\ n,这是一个由两个字符组成的字符串。你基本上必须在改变输入(用“\\ n”替换“\ n”)或老式if(theChar =='\ n')之间进行选择。 – ojrac 2009-07-03 15:25:06