【问题标题】:How to print vertically in C?如何在C中垂直打印?
【发布时间】:2013-09-23 22:43:42
【问题描述】:

我必须在一个循环中打印 fs,我想在两行中打印输出,而不是混合在一行上。

像这样:

printf("| %-7.2f ", Fahrenheit);

产生:

| -508.00 | -463.00 | -418.00 | -373.00 | -328.00 | -283.00 |

当我在上面的 printf 下添加 printf("| %-6d", Celsius); 时,它会在我的第一个 printf 旁边/中间打印。

我希望输出是这样的:

| -508.00 | -463.00 | -418.00 | -373.00 | -328.00 | -283.00 |
| -300  | -275  | -250  | -225  | -200  | -175  | -150  | -125|

而不是将两组值混合在同一行上。

我的部分代码:

for(Celsius = CelsiusMin;Celsius <= CelsiusMax; Celsius += CelsiusStep)
   {
      Fahrenheit = FahrenheitZero + Celsius * CelsiusToFahrenheit;

     printf("| %-7.2f ", Fahrenheit);
     printf("| %-6d", Celsius);

   }
   return EXIT_SUCCESS;
}

【问题讨论】:

  • 欢迎来到 SO。请显示您的代码 - 超过 printf() 行。
  • 我编辑了您的问题以反映我认为您要问的内容...如果这不是您想要的,请随时回滚。

标签: c format printf


【解决方案1】:

您不能直接将一个printf() 语句序列写入第 1 行,而将第二个并发序列 printf() 语句写入第 2 行,因此您将不得不伪造它。

您可能需要一些东西来构建两行输出,然后在它们准备好时打印它们:

char line1[128];
char line2[128];
char *next1 = line1;
char *next2 = line2;

for (int c = -325; c <= -125; c += 25)
{
     double f = (c + 40.0) * (9.0 / 5.0) - 40.0;
     next1 += sprintf(next1, "| %-7.2f ", f);
     next2 += sprintf(next2, "| %-7d ", c);
}

printf("%s|\n", line1);
printf("%s|\n", line2);

示例输出:

| -553.00 | -508.00 | -463.00 | -418.00 | -373.00 | -328.00 | -283.00 | -238.00 | -193.00 |
| -325    | -300    | -275    | -250    | -225    | -200    | -175    | -150    | -125    |

转换公式比您看到的引用的通常公式更简单,并且对于将°F 转换为°C 或反之亦然是对称的,不同之处在于转换因子(9.0 / 5.0)(5.0 / 9.0)。它依赖于 -40°C = -40°F。试试看:

  • C =  0°C; (C+40) = 40; (C+40)*9 = 360; (C+40)*9/5 = 72; (C+40)*9/5-40 = 32°F.
  • F = 32°F; (F+40) = 72; (F+40)*5 = 360; (F+40)*5/9 = 40; (F+40)*5/9-40 =  0°C

您也可以使用打印为double 的摄氏度做得更好;我保留了你选择的整数表示,但确保数字在两行对齐。

仅供参考:绝对零是 -273.15°C、0K、-459.57°F。因此,您正在尝试打印不存在的温度。

【讨论】:

    猜你喜欢
    • 2010-10-09
    • 2014-12-03
    • 1970-01-01
    • 2022-01-07
    • 1970-01-01
    • 2013-11-24
    • 1970-01-01
    • 1970-01-01
    • 2019-11-14
    相关资源
    最近更新 更多