【问题标题】:Print two strings [closed]打印两个字符串[关闭]
【发布时间】:2016-09-05 20:02:24
【问题描述】:

我想在控制台打印两个字符串

int k = 3;
for (int i = 0; i < k; i++)
{
    printf("\ra: %d\n\rb: %d", i*2, i*3);
}

我想得到这个结果:

a: 4
b: 6

但我明白了:

a: 0
a: 2
a: 4
b: 6

【问题讨论】:

  • “实时”是什么意思?该程序会打印您告诉它打印的内容。
  • 我认为您的术语 realtime 对大多数人来说并不意味着它对您的意义。我认为您试图只显示两行,计数器在视觉上滚动浏览值,最终以您发布的所需输出结束。我有多接近?

标签: c string console printf console-application


【解决方案1】:

您获得该输出的原因是您在 a 之前只有一个 \r,但在 a 和 b 之间只有一个 \n\r

printf("\ra: %d\n\rb: %d", i*2, i*3);

每个循环,光标都会返回到 b 所在行的开头并写入 OVER 它,并为 a 设置新值:

1st    2nd     3rd run
a=0    a=0    a=0
b=0    a=2    a=2 
       b=3    a=4
              b=6

因为这很快,所以您只能看到最后一个。真的不清楚你想做什么,但是如果你只需要最后一次运行的输出,你可以在循环之后写 printf :

for (int i = 0; i < k; i++)
{
...
}
printf("\r\na: %d\n\rb: %d", i*2, i*3);

【讨论】:

  • 顺便说一句,您也可以在这两个变量之间使用\t 制表符并将它们保持在一行。这样,每次打印时,整个内容都会覆盖printf("\ra: %d\t\tb: %d", i*2, i*3); 一些控制台支持转义码,例如"\33[1A",这实际上是键盘上向上箭头的代码。
【解决方案2】:

如果你把循环改为

for (int i = 2; i < k; i++)

这将打印您要求的结果。

a: 4
b: 6

【讨论】:

  • 我知道,但我希望循环更新“a”和“b”。在控制台中只有两个字符串(行)。
  • 我已经在控制台中打印了两个字符串(行),就像你问的那样。请在问题中提出。 ab 不能在循环中更新,因为它们不是变量。
  • 我的意思是在控制台循环之后我必须只有两个字符串。但是这个字符串在循环中更新。
  • 你有没有注意到这个问题被关闭的速度有多快?
  • @ARTAGE 在此问题因不清楚而关闭之前,也许你应该让它......更清楚。我在您的帖子下方的 cmets 中问了一个问题。不是因为我无聊。这是因为您的问题的确切性质尚不清楚。如何通过更新问题的清晰度来回答。你可以编辑自己的问题,你知道的。
【解决方案3】:

你可以在 for like 中做一个 if:

if (i * 2 == 4)
    printf ...

【讨论】:

  • 没有。我只想打印两个字符串,我希望 "b" 被更新。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-04-01
  • 1970-01-01
  • 2023-02-15
  • 2015-02-14
相关资源
最近更新 更多