【问题标题】:Printf prints unwanted newline-character [duplicate]Printf 打印不需要的换行符[重复]
【发布时间】:2014-01-30 15:54:32
【问题描述】:

== 总结 ==
我想打印一些东西,printf 会以某种方式自动在文本的某处添加一个“\n”。它似乎取决于输出的长度,因为当我将文本更改为在此处发布时位置发生了变化。但它不会在特定字母或特定位置添加新行(除非我不更改文本,否则它会保持在同一位置)。

示例输出:

文本“字符串”文本“第二个字符串
" 文本 "XYZ"。

== 相关代码 ==

有问题的 printf:

printf("\ntext \"%s\" text \"%s\" text \"XYZ\".", string, second_string);

在等待回车键之前有一个getchar():

getchar();

这一切都在一个 if 语句中,就在这个语句之前是:

fgets(second_string, 100, stdin);

整个代码('>' 标记有问题的行):

#include <stdio.h>
#include <stdlib.h>
#include <math.h>
#include <string.h>

char string[20] = "string\0";
char second_string[100];

void function2() {

  system("cls");
  printf("text");    

}

void function(void) {  

  function2();  

  printf("text");

  fgets(second_string, 100, stdin);

  if (strcmp("second string", second_string)==0) {
    function2();
  }
  else {

    function2();
    printf("text");
    getchar();

    function2();
>   printf("\ntext \"%s\" text \"%s\" text \"XYZ\".", string, second_string);

    fgets(second_string, 100, stdin);

  }

}

void main(void) {
  function();
}

== 一些标题 ==
这就是我问题的核心。随时询问详情。我知道这个解决方案可能很简单,但我在互联网上的任何地方都找不到它(可能我只是搜索不好)并且需要它来上学。如果解决方案之前已经发布在某个地方,请随时提供链接,以便我阅读。 我也是瑞士人,所以我的英语可能不是最好的:D

提前致谢!

如果有人想抱怨这堵可能是多余信息的墙,我只想提供尽可能多的信息。上面有总结。它包含基本信息。

【问题讨论】:

  • 如果您不知道,fgets() 保留来自stdin 的尾随换行符作为其结果数组中的最后一个字符。您可能需要考虑这一点。

标签: c string printf newline output


【解决方案1】:

fgets 保留换行符,如果有的话。在second_string 中有一个隐含的\n。因此,在第二个双引号字符串中,您总是会在结束引号之前看到一个换行符。

【讨论】:

    【解决方案2】:

    fgets 函数会在从控制台读取换行符时将其复制到字符串中。因此second_string 以换行符结尾,作为换行符打印到屏幕上。如果您不希望它出现,则需要从字符串中删除它

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-08-17
      • 1970-01-01
      • 2023-03-10
      • 2012-08-22
      • 1970-01-01
      • 2015-10-16
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多