繁体   English   中英

如何让 printf() 以正确的顺序打印 output?

[英]How do I make printf() print output in the correct order?

我有一个简单的工作 function 创建一个表记录文件信息。

但是, printf以错误的顺序打印我的 output。 我尝试使用fflush(stdout)刷新缓冲区,但它没有改变任何东西。

function:

void printTable(char *libraryName)
{

   printf("%-40s%-30s%-25s%-20s\n", "[File Name]", "[Creation Time]", "[Version]", "[Size]");
   fflush(stdout);
   printf("%-40s%-30d%-25d%-20f\n", libraryName, getCreationTime(libraryName), getVersion(libraryName), getSize(libraryName));
   fflush(stdout);

}

get 函数在单独的文件中定义,并给出准确的 output。

编译后的output是这样的:

[File Name]       [Creation Time]            [Version]       [Size]
125 kB
Version: 1.0.0.0 [6-02-2020 03:32:21 PM] Objects.dll

但它需要看起来像这样:

[File Name]       [Creation Time]            [Version]       [Size]
Objects.dll       [6-02-2020 03:32:21 PM]     1.0.0.0        125 kB

我需要对我的 printf() function 做什么才能获得正确的订单 output? 我试过刷新缓冲区并重新排列函数的顺序。 是否可以在不为每个 function 编写单独的 printf() 语句的情况下以正确的顺序获得 output?

您发布的代码很好,冲洗不是答案。 %d说明符无法打印[6-02-2020 03:32:21 PM]Version: 1.0.0.0之类的字符串, %f也无法生成125 kB

我怀疑您的get函数正在打印它们的结果而不是返回它们,例如:

int getCreationTime(char *libraryName)
{
    printf("[6-02-2020 03:32:21 PM] ");
}

int getVersion(char *libraryName)
{
    printf("Version: 1.0.0.0 ");
}

double getSize(char *libraryName)
{
    printf("125 kB\n");
}

我不确定你返回什么。 也许什么都没有? 我觉得你有一些你忽略的编译器警告。 如果是这样,请阅读它们并解决它们!

如果您想知道为什么结果会混淆,那是因为 C 不禁止 function arguments 以任何特定顺序进行评估,例如从左到右。 看起来getSize首先被调用,然后是getVersiongetCreationTime 最后,我们看到的printf打印libraryName

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM