我有一个简单的工作函数,可以创建一个表记录文件信息。
但是,printf以错误的顺序打印我的输出。我尝试使用fflush(stdout)刷新缓冲区,但它没有改变任何东西。
功能:
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);
}
Run Code Online (Sandbox Code Playgroud)
get 函数在单独的文件中定义并提供准确的输出。
编译后,输出如下所示:
[File Name] [Creation Time] [Version] [Size]
125 kB
Version: 1.0.0.0 [6-02-2020 03:32:21 PM] Objects.dll
Run Code Online (Sandbox Code Playgroud)
但它需要看起来像这样:
[File Name] [Creation Time] [Version] [Size]
Objects.dll [6-02-2020 03:32:21 PM] 1.0.0.0 125 kB
Run Code Online (Sandbox Code Playgroud)
我需要对我的 printf() 函数做什么才能获得正确的订单输出?我试过刷新缓冲区并重新排列函数的顺序。是否可以在不为每个函数编写单独的 printf() 语句的情况下以正确的顺序获得输出?
您发布的代码很好,刷新不是答案。%d说明符无法打印像[6-02-2020 03:32:21 PM]and这样的字符串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");
}
Run Code Online (Sandbox Code Playgroud)
我不确定你要返回什么。也许什么都没有?我感觉你有一些编译器警告你忽略了。如果是这样,请阅读它们并解决它们!
如果您想知道为什么结果会混淆,那是因为 C 不禁止以任何特定顺序评估函数参数,例如从左到右。看起来getSize首先被调用,然后是getVersionand getCreationTime。最后,printf我们看到了 prints libraryName。