2

我想将一些数据逐行写入文件。

   int main ()
   {
        char* mystring = "joe";
        int i  ;
        FILE * pFile;
        pFile = fopen ("myfile.txt", "wb");
        for(i = 0 ; i <  10 ; i++)
        {
            fprintf(pFile,"%s\n",mystring);
        }
        fclose (pFile);
        return 0;
  }

我正在使用新行特别字符,以便新数据进入下一行。

问题是在最后一行我不想要换行符。

注意:仅用于我使用 for 循环的演示。在实际情况中,我使用链表来迭代数据,因此我没有长度。

请告诉我如何从文件中删除最后一行。

4

6 回答 6

8

有几个简单的答案:

A. 当您到达列表末尾时,将文件截断一个换行符。

B.在字符串之前打印换行符,但前提是不是第一行:

if (i > 0)
    fputs("\n", pFile);
fputs(mystring, pFile);

请注意,这不依赖于for循环;它只要求i第一行只有 0。

于 2013-08-28T04:53:52.803 回答
4

我认为这样的事情会很好:

fprintf (pFile, "%s%s", (i > 0 ? "\n" : ""), mystring);
于 2013-08-28T05:13:15.833 回答
1

一种简单的方法是将字符串的打印和换行符的打印分成单独的语句,然后对换行符的打印进行条件化。像这样的东西;

for (i = 0; i < 10; i++)
{
    fprintf(pFile, "%s", mystring);
    if (i < 9) // Or whatever condition you need - could be "atEndOfList()" or whatever.
        fprintf (pFile, "\n");
}
于 2013-08-28T04:51:14.757 回答
0

由于您使用的是链表,因此您可以检查当前项目是否有下一个项目。如果有,打印一个换行符,如果没有,不要打印一个换行符,因为它是最后一项。

于 2013-08-28T05:44:18.387 回答
0

在以下代码片段中,可以将 10 更改为任何值,而无需修改任何其他测试或 if。

    pFile = fopen ("myfile.txt", "wb");

    fprintf(pFile, "%s", mystring);
    for(i = 1 ; i <  10 ; i++)
    {
        fprintf(pFile, "\n");
        fprintf(pFile, "%s", mystring);
    }
    fclose (pFile);
于 2013-08-28T06:48:15.133 回答
0

您不知道长度,但必须有一个条件,当它变为假时,程序将停止将字符串放入文件中,因此在循环内,编写与循环终止条件相同的 if 条件。例如,对于您的上述编,它应该是:

for(i=0;i<10;i++)
{ 
    if((i+1)!<10)    //executed when i=9
    fprintf(pFile,"%s",mystring);
    else             //executed for i=0 to 8
    fprintf(pFile,"%s\n",mystring);
}
于 2013-08-28T06:54:36.293 回答