【问题标题】:Slowly Appears printf, in C99 [duplicate]在 C99 中慢慢出现 printf [重复]
【发布时间】:2016-05-30 10:03:51
【问题描述】:

我想制作一个类似于 printf 的函数,但它使文本出现缓慢,通过使用 double for,一个打印 char 和一个花费时间:

    char phrase[30]={"Printf random"};
    for(int a=0;a<=30;a++){
        printf("%c",phrase[a]);
        for(int t=0;t<=1000000;t++){
            int f;
            f++;
        }
    }

但是当我运行时,起初,它需要几秒钟(第二个 for),然后它会打印所有短语。

为什么每次第一个都进入第二个? 也许一旦程序第一次计算第二次,就不需要时间再计算一次?我该如何解决?

【问题讨论】:

  • 在 for 循环之间刷新缓冲区。
  • 您的stdout 已被缓冲。您必须将其设置为无缓冲,否则您必须刷新它。
  • 不要使用空操作循环实现延迟。查看Sleepnanosleep 之类的函数。

标签: c loops printf geany


【解决方案1】:

首先,在你的代码中,通过说

 for(int a=0;a<=30;a++){    

你是一对一,它调用undefined behavior。应该是

 for(int a=0;a<30;a++){

也就是说,您需要刷新输出缓冲区才能将缓冲区内容实际发送到关联文件。否则,标准输出实际上是行缓冲的,它不会自动刷新内容。所有的内容都会存储在缓冲区中,当程序快结束时,所有打开的缓冲区都会被刷新,然后整个内容就会全部出现。

【讨论】:

  • 他当然只想打印实际字符,而不是nul填充,所以循环控制应该是for (int a = 0; phrase[a]; a++) ...
【解决方案2】:

int f 应该在第二个 for 循环之前。您每次在循环中创建一个新变量 f 并递增新变量。

在您的情况下,它可以工作,因为循环中没有其他变量。因此,每次循环中,变量f都会被创建在同一个内存位置,并且具有旧值。

如果您有一个包含多个 if 条件的复杂循环,这可能不起作用。

另外,正如其他人所提到的,您需要刷新输出。

【讨论】:

  • f var 的范围对于 1000000 次循环始终相同...
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-10-05
  • 1970-01-01
相关资源
最近更新 更多