从文本文件中读取行,打印其中的40行并“必须”使用系统调用lseek或fseek来更改偏移量?

时间:2017-06-09 08:02:41

标签: c text printf offset fseek

display_text.c 程序不使用字符串矩阵作为缓冲区,而是直接从文本中读取字符串。 文本必须显示为由每行40行组成的页面。 打印完第一页后,程序会显示提示cell并等待用户的命令。

命令是:

Sub Macro1()

ActiveSheet.ChartObjects("Chart 1").Activate
ActiveChart.FullSeriesCollection(1).Select

MsgBox Sheets(1).Cells(1, 1)

With Selection.Format.Fill
    .Visible = msoTrue
    .ForeColor.RGB = Sheets(1).Cells(1, 1)
    '.ForeColor.RGB = RGB(88, 88, 88)
    .Transparency = 0
    .Solid
End With

End Sub

该程序使用系统调用>>n: to show next page p: to show previous page q: to quit the program 。 请注意行的长度不同!

lseek(fd, offset, mode)

我想:首先打印给定fseek()的40行,但由于我直接从文件中读取,我得到的输出是打印超过40行,可能是因为{{1} } string是预定义的,如果你可以建议我如何打印那些大小不同的行!

1 个答案:

答案 0 :(得分:0)

两个函数允许逐行读取文件。

第一个是<div class="wrapper"> <div class="contents"> <div> <p>Actualmente se encuentra en:</p> <p> <a href="index.html">Lion</a> <p> </div> <div class="content"> <div class="image"> <img src="https://s-media-cache-ak0.pinimg.com/736x/71/9a/a0/719aa07e7ccc325fd05b933eea027dec.jpg" alt="Lion"> </div> <div class="box"> <h2>León de Áfric</h2> <p>Lorem ipsum dolor sit amet, consectetur adipisicing elit. Earum, nemo. Consequatur quod rerum reiciendis, laborum, ex, accusamus atque fugiat dicta aperiam commodi adipisci impedit animi. Non impedit, reprehenderit eius dolor.</p> <p> <a href="elephant.html">Siguiente »</a> </p> </div> </div> </div> </div>我建议你使用。你可以阅读它here。此功能的优点是,它会根据您正在读取的行的长度自动为存储变量分配正确的大小。不幸的是,没有C版本实现getline()。它不是C标准的一部分,而是POSIX.1-2008的一部分,因此您只能在符合此标准的系统上使用它。

另一个使用不太友好的功能是getline(),其文档为here

在这两种情况下,你只需要做一个迭代40次的循环,例如:

fgets()

使用char* storingVariable = NULL; size_t len = 0; for (int i = 0; i != 39; getline(&storingVariable, &len, inFile)) printf("Line is : %s\n", storingVariable); 的常用方法如下:

getline()

我最近问了similar question这可能会比我刚才更加详细地帮助你。