Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/c/61.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C 如何使printf()以正确的顺序打印输出?_C_Output_Printf - Fatal编程技术网

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
我们看到prints
libraryName

printf按您指定的顺序排列。我认为函数返回的值有问题。字符串是否包含任何特殊字符,例如\r?很明显,函数不会返回期望返回的字符。例如,
Version:
只能来自您的getter。它们也最有可能输出其他字符-最有可能是回车。您不需要
fflush
printf
\n
之后刷新。编辑问题以提供一个。您的printf语句中有
%d
%f
,但根据您所需的输出,这些输出不正确
[6-02-2020 03:32:21 PM]
不是整数-
也不是整数-
1.0.0
<代码>125 kB
不是浮点值。您的函数是返回值还是将值打印到标准输出?