【问题标题】:printing the multiple string values in a single line in c在c中的一行中打印多个字符串值
【发布时间】:2021-10-08 10:06:27
【问题描述】:

我正在从返回 4 个字符串值的方法中读取数据

 printf(%s,%s,%s,%s \n",modValuex.A,modValuex.B,modValuex.C,modValuex.D)

它给出如下值,但不在一行中,如(12,-12,45)

12
,-12
,45

1
,-23
119

我该如何解决这个问题/ 我也尝试添加 \r 和 \t,结果相同。

【问题讨论】:

  • 我猜错误是在scanf()调用之前的几行。请发minimal reproducible example(显示)。
  • 您不是在打印带符号的数字 (%d),而是在打印字符串 (%s),而且您的字符串似乎已经包含换行符,所以有在printf 行中您无能为力,以防止它们出现。即,错误在其他地方。
  • 有两种方法可以解决此问题。第一种方式在你展示的范围内。这种方式难以理解、复杂、耗时、容易出错、不可读、不需要。第二种方法既简单又干净。如果您想要简单干净的方式,请提供minimal reproducible example
  • 显然生成 4 个字符串的函数没有做你想做的事。因此,将该功能与您希望它执行的说明一起发布
  • 出于调试目的,将%s,%s,%s,%s 更改为<%s><%s><%s><%s> 看看会发生什么。可能你的字符串末尾有一个\n。显示字符串modValuex.A 等是如何生成的。

标签: c printf


【解决方案1】:

如评论所述,最好避免使用这种trimming 字符串。

在 C 中,一种可能性是将第一个 \n 替换为 \0

char* chop(char *s) {
    char *p = s;
    while (*p++)
        if (*p == '\n') {
            *p = '\0';
            break;
        }
    return s;
}

这样称呼:

char s1[] = "12\n";
char s2[] = "13\n133\n1333\n";
char s3[] = "14\n";
printf("%s,%s,%s", chop(s1), chop(s2), s3);

它打印12,13,14 和一个换行符。

s2 的字符不会被打印出来。 strlen(s2) 是 2,但 sizeof s2 是 13。

但是那个方法(你读取数据)应该是一个帮助,而不是一个复杂的来源。 (在 C 中,您宁愿分配函数的返回值)

【讨论】:

    【解决方案2】:

    modValuex.A 和其他人包含'\n'

    要打印没有'\n'modValuex.A,请在打印前将其删除或在'\n' 之前停止打印。


    如果可能,只需删除'\n'

    modValuex.A[strcspn(modValuex.A, "\n")] = '\0';
    

    如果modValuex.A和好友不变,要在'\n'之前停止,使用宽度限制:

    // printf(%s,%s,%s,%s n",modValuex.A,modValuex.B,modValuex.C,modValuex.D)
    printf(%.*s,%.*s,%.*s,%.*s\n",
        (int) strcspn(modValuex.A, "\n"), modValuex.A,
        (int) strcspn(modValuex.B, "\n"), modValuex.B,
        (int) strcspn(modValuex.C, "\n"), modValuex.C,
        (int) strcspn(modValuex.D, "\n"), modValuex.D);
    

    size_t strcspn( const char *dest, const char *src )
    返回字符串中不在第二个字符串中的初始字节数。

    【讨论】:

      猜你喜欢
      • 2021-07-12
      • 2020-10-29
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-11
      • 2016-07-13
      • 2020-02-01
      相关资源
      最近更新 更多