Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/loops/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
c-如何删除\n?_C_Loops - Fatal编程技术网

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
(退格)将活动位置移动到当前行的上一个位置。如果激活位置位于行的初始位置,则显示设备的行为未指定

其他答案已经证明可以用不同的方法满足您的需求。

替代方法:

  • 如果您使用的是符合ansi标准的终端,&
  • 您的printf不使用除“”(空格)以外的任何空格字符(例如。\t、\n、\v等)
  • 您可以使用以下代码:-)

    intt;
    对于(i=0;i<10;i++)
    t=printf(“******\n”);//t将保存打印的字符数。
    printf(“\033M\033[%dC”,t-1);
    
    它使用2个转义字符:

  • M:移到前一行,但移到第一列
  • [-C:按位置向右移动
  • 如果printf恰好包含其他空白字符,如\n、\t等,则需要使用一些逻辑进行计算,以找到水平光标位置

    另一种方法是:

    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);