C 如何使printf()以正确的顺序打印输出?
我有一个简单的工作函数,用于创建记录文件信息的表 但是,C 如何使printf()以正确的顺序打印输出?,c,output,printf,C,Output,Printf,我有一个简单的工作函数,用于创建记录文件信息的表 但是,printf以错误的顺序打印我的输出。我尝试使用fflush(stdout)刷新缓冲区,但没有改变任何东西 职能: void printTable(char *libraryName) { printf("%-40s%-30s%-25s%-20s\n", "[File Name]", "[Creation Time]", "[Version]", &qu
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);
}
get函数在单独的文件中定义,并提供准确的输出
编译后,输出如下所示:
[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
但它需要像这样:
[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()函数做什么才能获得正确的顺序输出?我尝试过刷新缓冲区并重新排列函数顺序。是否可以在不为每个函数编写单独的printf()语句的情况下以正确的顺序获得输出?您发布的代码很好,而flush不是答案。
%d
说明符无法打印像[6-02-2020 03:32:21 PM]
和版本:1.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不禁止函数参数按任何特定顺序求值,例如从左到右。看起来是先调用
getSize
,然后调用getVersion
和getCreationTime
。最后,printf
我们看到printslibraryName
printf按您指定的顺序排列。我认为函数返回的值有问题。字符串是否包含任何特殊字符,例如\r?很明显,函数不会返回期望返回的字符。例如,Version:
只能来自您的getter。它们也最有可能输出其他字符-最有可能是回车。您不需要fflush
,printf
在\n
之后刷新。编辑问题以提供一个。您的printf语句中有%d
和%f
,但根据您所需的输出,这些输出不正确[6-02-2020 03:32:21 PM]
不是整数-也不是整数-1.0.0
<代码>125 kB
不是浮点值。您的函数是返回值还是将值打印到标准输出?