【问题标题】:I'm trying to convert this C++ code to C code, but I'm having problem with fflush() function [closed]我正在尝试将此 C++ 代码转换为 C 代码,但我遇到了 fflush() 函数的问题 [关闭]
【发布时间】:2022-01-16 18:46:16
【问题描述】:

我正在尝试将此 C++ 代码转换为 C 代码,但我遇到了 fflush() 函数的问题,或者如果有其他类似的代码函数,请分享。

#include <iostream.h>
#include <time.h>
#include<dos.h>
int main()
{
    cout << "Loading";
    cout.flush();
    for (int j=0; j<2; ++j) {
        for (int i = 0; i < 3; i++) {
            cout << ".";
            cout.flush();
            sleep(1);
        }
        cout << "\b\b\b   \b\b\b";
    }

    return 0;
}
#include <stdio.h>>
#include <unistd.h>
int main()
{
   printf("Loading");
    fflush();
    for (int j=0; j<2; ++j){
        for (int i = 0; i < 3; i++) {
            printf(".");
            fflush();
            sleep(1);
        }
       printf("\b\b\b   \b\b\b");
    }
    return 0;
}

【问题讨论】:

  • 使用fflush(stdout);
  • 要明确:fprintf(stdout, "Loading");fflush(stdout); 都以字母 f 开头,表示它们需要一个 FILE*(如果我没记错的话)。

标签: c++ c file input


【解决方案1】:

fflush 需要文件指针作为参数。这会将与文件对应的本地缓冲区数据(存储在主内存中 - 主要是 DRAM)刷新到存储在辅助存储中的实际文件中。 对于您的情况,请使用fflush(stdout)

【讨论】:

    【解决方案2】:

    fflush 接受一个参数 - 它应该刷新的流。您需要使用fflush(stdout)

    另一个问题是 C++ 代码也有语义错误。与其使用coutprintfstdout,不如使用cerr/stderr,而不是使用cerr,无论如何都应该是无缓冲的。使用它你可能不需要fflush。即

    #include <stdio.h>
    #include <unistd.h>
    
    
    int main(void)
    {
        fprintf(stderr, "Loading");
        for (int j=0; j<2; ++j){
            for (int i = 0; i < 3; i++) {
                fprintf(stderr, ".");
                sleep(1);
            }
            fprintf(stderr, "\b\b\b   \b\b\b");
        }
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2013-12-13
      • 1970-01-01
      • 2021-10-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-12-22
      相关资源
      最近更新 更多