File io 用c程序编写表格格式的文件

File io 用c程序编写表格格式的文件,file-io,fputs,File Io,Fputs,我想用c程序写一个表格格式的文件。 我正在使用fputs来编写文件。我的文件看起来像: [sl] [Name] [School] [add] 1 ABC DEF Dav India 2 XYZ LLL USA 但是,我希望输出文件如下所示: [sl] [name] [school] [add] 1 ABC DEF DAV INDIA 2 XYZ LLL

我想用c程序写一个表格格式的文件。 我正在使用fputs来编写文件。我的文件看起来像:

    [sl] [Name] [School] [add]
    1 ABC DEF Dav India
    2 XYZ LLL USA
但是,我希望输出文件如下所示:

    [sl]    [name]     [school]    [add]
     1      ABC DEF     DAV        INDIA
     2      XYZ         LLL        USA

我想知道在printf中是否有类似长度说明符的东西,以便我可以更改文件格式

我想你要找的是
fprintf
。了解有关fprintf的更多信息。 它的使用方式与printf完全相同,只是它写入文件

编辑 如果您的字符串存储在不同的变量中,则使用
fprintf
,如下所示:

fprintf(fp,"%-15s %-15s %-15s %-15s", "string 1", "string 2", "string 3", "string 4");

数字
15
是字符串将使用的固定长度(您可以根据您拥有的最大字符串长度或其他首选项进行更改)。减号表示左对齐字符串。

正如Kyuubi所指定的,您将希望使用
fprintf
而不是
fputs
它将减少所需的代码量。
fprintf
将根据格式字符串将数据写入文件。由于您的数据将是字符串数据,因此您将以片段的形式将其写出,并为每个片段指定格式字符串中的%s。以您的
ABC DEF
单词为例。您可以使用
fprintf
编写字符串文字,如下所示:

fprintf (fp, "   %s    %s\n", "ABC", "DEF");
您还可以通过指定
%
s
之间的整数来指定所写每个单词的最小字段宽度,例如
%10s
以最小宽度10个字符写出“-----ABC”。您还可以在数字前放置一个
-
符号,使字符串左对齐。例如,
%-10s
输出“ABC-------”。(虚线实际上是空格,仅用于说明)可以帮助您将所需的信息分隔成表格形式,而无需为每个不同的fprintf调用写出不同数量的空格


有关所有选项,请参见“man 3 fprintf”。网上有1000多个例子可以帮助你

如果您知道要添加多少空格,为什么不创建一个大小+个空格的新字符串呢。然后使用指向原始字符串的指针向下迭代原始字符串,并在从原始字符串复制到新字符串时为原始字符串中找到的每个字符串写入X个空格?您还可以将原始字符串拆分为单独的单词,并使用fprintf(包括所需的附加格式)将其写回。您能否显示您的数据在程序中的当前保存方式。您是否有需要编写的字符串和现有字符串,或者是否在不同的变量中有
s1
name
school
add
,都有点含糊不清。让我们看看你有什么。我不知道每个单词的确切长度。但我知道每列的最大条目长度。说“名字”的字母不会超过50个。所以,就像printf一样,如果我给左缩进和限制70个字母,我将得到一个可变长度的空格&我可以在70个空格后开始“school”列的条目。但是如何处理文件呢?我在文件中写的是:fputs(“1”,fp);FPUT(“ABC DEF”,fp);FPUT(“DAV”,fp);我以值为例,实际上它将存储在一个变量中。如果您可以指定要写入的字符串的各个部分,请参阅Kyuubi的答案。fprintf比fputs更灵活地将格式化数据写入文件。fprintf没有帮助,他有1个字符串要写入,原始字符串中有X个空格,他想增加原始字符串中存在的空格数。如果他只有一个字符串,就没有办法像表一样格式化。或者他可以先将字符串分成多个字符串,然后使用
fprintf
打印它们。你说得对。我猜他只需要发布代码的相关部分,显示他想要写出的数据的当前存储:-)我在文件中写的是:fputs(“1”,fp);FPUT(“ABC DEF”,fp);FPUT(“DAV”,fp);我以值为例,实际上它将存储在一个变量中。