C 使用for循环进行加载。。。动画

C 使用for循环进行加载。。。动画,c,loops,for-loop,C,Loops,For Loop,所以我用C语言制作了一个BMI计算器,但我想让它看起来更像一个程序,让它更有趣,更具特色。我一直在尝试实现的一个功能是制作一个动画,上面写着加载。。。其中“…”一次出现一秒钟,以模拟实际正在加载的东西。我想出了这样的办法: printf("Loading"); for (int i = 0; i < 5 ; i++) { printf("."); sleep(1); } printf(“加载”); 对于(int i=0;i

所以我用C语言制作了一个BMI计算器,但我想让它看起来更像一个程序,让它更有趣,更具特色。我一直在尝试实现的一个功能是制作一个动画,上面写着加载。。。其中“…”一次出现一秒钟,以模拟实际正在加载的东西。我想出了这样的办法:

printf("Loading");
for (int i = 0; i < 5 ; i++)
{   
    printf(".");
    sleep(1);
}
printf(“加载”);
对于(int i=0;i<5;i++)
{   
printf(“.”);
睡眠(1);
}
然而,这根本不起作用,因为它打印出来的所有内容都是加载,然后“…”和程序中接下来出现的任何内容。 如果在我放入的循环中的printf中\n如中所示,我已经能够使它工作

printf("Loading");
for (int i = 0; i < 5 ; i++)
{   
    printf(".\n");
    sleep(1);
}
printf(“加载”);
对于(int i=0;i<5;i++)
{   
printf(“.\n”);
睡眠(1);
}

任何关于为什么会发生这种情况的建议都将不胜感激。谢谢

您可以使用
\b
退格。您可能还必须确保在每次打印后刷新控制台,因为通常只有在遇到
\n
时才会发生这种情况

下面是一个可怕的Windows加载屏幕模拟器:

(只有
Sleep
特定于Windows,其余为标准C。)

#包括
#包括
内部主(空)
{
printf(“加载”);fflush(标准输出);
对于(;;)
{

对于(int i=0;i您可以使用
\b
退格。您可能还必须确保在每次打印后刷新控制台,因为通常只有在遇到
\n
时才会发生这种情况

下面是一个可怕的Windows加载屏幕模拟器:

(只有
Sleep
特定于Windows,其余为标准C。)

#包括
#包括
内部主(空)
{
printf(“加载”);fflush(标准输出);
对于(;;)
{

对于(int i=0;i请尝试以下操作:

printf(“加载”);
fflush(stdout);
对于(int i=0;i<5;i++){
putchar('.');
fflush(stdout);
睡眠(1);
}
putchar('\n');

sleep()
unistd.h
Unix库的一部分。

试试这样的方法:

printf(“加载”);
fflush(stdout);
对于(int i=0;i<5;i++){
putchar('.');
fflush(stdout);
睡眠(1);
}
putchar('\n');

sleep()
unistd.h
Unix库的一部分。

这是因为
stdout
是缓冲区。
\n
也发出缓冲区刷新的信号。您需要在每次迭代后刷新缓冲区。请尝试
fflush(NULL)
fflush(stdout)
@Raildex
\n
不一定发出缓冲区刷新的信号,但终端在换行时刷新缓冲区是很常见的。如果我错了,请纠正我。这是因为
stdout
是缓冲的。
\n
还发出缓冲区刷新的信号。每次迭代后都需要刷新缓冲区。请尝试
fflush(NULL)
fflush(stdout)
@Raildex
\n
不一定表示缓冲区刷新,但终端在换行时刷新缓冲区是很常见的。如果我错了,请纠正我。
#include <stdio.h>
#include <windows.h>

int main (void)
{
  printf("Loading"); fflush(stdout);
  
  for(;;)
  {
    for(int i=0; i<3; i++)
    {
      printf("."); fflush(stdout); 
      Sleep(300);
    }
    for(int i=0; i<3; i++)
    {
      printf("\b \b"); fflush(stdout);
      Sleep(300);
    }
  }

  return 0;
}