C中是否有替换\ n?我可以在不使用\ n的情况下跳转到下一行吗?我遇到了这个问题,我似乎无法找到方法......
#include < stdio.h>
void main()
{
printf("A");
printf("B");
}
我希望它打印
A
B
而不是
AB
但我不能使用\ n。
答案 0 :(得分:4)
您可以使用puts("A"); puts("B");
。
答案 1 :(得分:3)
要在不编写\n
的情况下输出\n
,您可以简单地printf("%c",10);
或char c=10;write(1,&c,1);
或其他100种方式输出ascii 10.
但如果您想完全避免换行符,答案会有所不同。它不是C或您的代码实际上决定转到新行,但无论设备是什么显示您的输出。
E.g。终端,行式打印机或显示html的Web浏览器。
假设您正在输出到浏览器,答案将是&lt; br&gt;
如果要输出到xterm终端,\ 033 [1B将光标向下移动一行。输出回车\ r \ n移动到行的开头。
例如:
printf("test\033[1B\r123");
将输出(在xterm中)
test
123
答案 2 :(得分:2)
作为puts()
的替代方案,您可以使用等同于\n
的八进制:\012
。
E.g。
#include <stdio.h>
int main()
{
printf("A\012");
printf("B\012");
return 0;
}
答案 3 :(得分:2)
\n
表示“新行”。 \r
表示“回车”。这些字符源自旧的换页打印机,它们需要两个,一个用于将纸张前进到一个新行,一个用于将带有打印头的滑架返回到行的开头。
不同的操作系统使用两者的不同组合来表示文本中的新行:
\n
\r\n
\r
C标准库中没有与规范平台无关的方式来表示“系统”的换行符/回车符。但是,许多其他语言和/或库已经实现了这一点,例如:
System.getProperty("line.separator")
System.Environment.NewLine
但是,如果您在文本文件上打开了输出流,则标准C库应将\n
转换为指示当前系统上新行所需的任何内容。
答案 4 :(得分:1)
我只是使用:
printf("A%cB",10);
答案 5 :(得分:1)
在 C 中,转义序列\n
表示属于基本执行字符集的字符。
特别是,当我们的C程序运行时,可以确定存在换行符。
更重要的是:\n
映射到1且只有1个字符,其代码是char
类型范围内的正整数。
然而,显示设备的行为可以产生其他结果
例如,当我们将一个字符\n
发送到Windows下的文本文件时,它将被两个字符的序列\ x0D \ x0A(LF + CR,即:换行+回车)替换。
标准C99或C11表示:
(5.2.2)\ n(新行)将活动位置移动到下一行的初始位置。
其含义(在每个在其标准显示设备中打印多行的系统中),发送字符\n
的“效果”是“前进到下一行”和“转到开头的那条线“。它是“换行”和“回车”操作的总和。
在DOS / Windows中,这相当于发送这两个字符的序列:'\ xD','\ xA'。
在Linux / Unix中,这相当于发送唯一的字符'\ xD'。
此处有更多详情:http://en.wikipedia.org/wiki/Newline
总结一下,我们必须区分字符\n
本身,以及与\n
相关的语义何时被视为C中的控制字符。
只需发送带有'\n'
或putc()
的字符printf()
即可“生成”新行。
使用\n
是更好的方法。
另一个非常好的选择是@ 1''指出:使用函数puts(str)。
此函数在字符串str的末尾附加一个换行符。
我认为尝试其他替代方案并不是一个好主意:
printf("%c", 10); // 10 == 0x0A
printf("%c", 13); // 10 == 0x0D
printf("\x0A"); // CR
printf("\x0D"); // LF
您没有正确解决问题,因为您的程序依赖于系统 适用于Windows,Linux还是什么?
最糟糕的是:从理论上讲,标准 C 并不能确保您的字符的ASCII / Unicode代码编号与程序运行的系统中使用的字符之间的对应关系。此问题也涉及控制字符。
因此,您不能确定0x10表示“回车”而0x13表示“换行” 为了确保这一点,有必要检查以下宏的存在:
__STDC_ISO_10646__
(该宏(如果存在)是一个long int
数字,其中包含有关编译器支持的Unicode版本的信息。)
重要的是:如果未定义宏__STDC_ISO_10646__
,则无法确定分配给系统中字符的代码。
因此,它不能使用“魔数”10和13.