c-如何删除\n?
可能重复:c-如何删除\n?,c,loops,C,Loops,可能重复: 我想删除中的最后一个\n for(i = 0; i < 10; i++) printf("****\n"); (i=0;i
我想删除中的最后一个
\n
for(i = 0; i < 10; i++)
printf("****\n");
(i=0;i<10;i++)的
printf(“******\n”);
似乎\b
对此不起作用。
我该怎么办 最好的解决方案是根本不打印它:
for(i = 0; i < 10; i++) printf("****%s", ((i!=9)?"\n":""));
用于(i=0;i<10;i++)printf(*****%s),((i!=9)?“\n”:”);
或者也可以使用两个printf(具有相同的效果,只是代码多一点,更易于阅读):
(i=0;i<10;i++)的{
printf(“****”);
如果(i!=9){
printf(“\n”);
}
}
printf(*****);
对于(i=0;i<9;i++)
printf(“\n****”);
这与Ivaylo给出的答案基本相同,但与其检查每次迭代的条件,不如将其全部移出:
for(i = 0; i < 9; i++)
printf("****\n");
printf("****");
(i=0;i<9;i++)的
printf(“******\n”);
printf(“****”);
现在,您是否需要这样的微优化是另一回事。没有明确定义的可移植方法,您只能更改当前行的字符,如标准所述:
\b
(退格)将活动位置移动到当前行的上一个位置。如果激活位置位于行的初始位置,则显示设备的行为未指定
其他答案已经证明可以用不同的方法满足您的需求。替代方法:
intt;
对于(i=0;i<10;i++)
t=printf(“******\n”);//t将保存打印的字符数。
printf(“\033M\033[%dC”,t-1);
它使用2个转义字符:
for(i = 0; i < 10; i++)
printf("****\033[s\n"); // \033[s would save column number
printf("\033M\033[u");
(i=0;i<10;i++)的
printf(“***\033[s\n”);//\033[s]将保存列号
printf(“\033M\033[u”);
更多关于ANSI转义字符的详细信息:-)C标准没有定义用于光标定位的字符序列,将光标上移一行(或移动到以前的文本缓冲区)。因此,没有100%可移植的方法来实现这一点 但是,根据您的平台,大多数终端控制台支持以下操作:
for(i = 0; i < 10; i++)
printf("****\n");
printf("\033[A\033[C\033[C\033[C\033[C");
更好的解决方案(至少减少硬编码)可能是在Windows上使用了或类似的工具。你的意思是要在打印后删除换行符?最好先不要打印它。一旦打印出来,它就不那么好了,正如你在Mike和anishsane的回答中所看到的。这就是我要找的,谢谢~谢谢,但
I=1..10
只是我举的一个例子。这是我的要确定它是否已到达我工作中的最后一个\n
,并不是那么简单。我想删除打印的\n
。这似乎有点难读~谢谢~我不明白。“接受的答案”只是这个答案的一个特例,当printf语句为常量时:***\n.对于printf中的任何文本,这个答案都是通用的。没关系。。。。
int t;
for(i = 0; i < 10; i++)
t=printf("****\n"); // t would hold number of characters printed.
printf("\033M\033[%dC",t-1);
for(i = 0; i < 10; i++)
printf("****\033[s\n"); // \033[s would save column number
printf("\033M\033[u");
for(i = 0; i < 10; i++)
printf("****\n");
printf("\033[A\033[C\033[C\033[C\033[C");
#define BACKUP_NEWLINE "\033[A\033[C\033[C\033[C\033[C"
for(i = 0; i < 10; i++)
printf("****\n");
printf("%s", BACKUP_NEWLINE);