避免在最后一行输出上换行

时间:2013-08-28 04:43:38

标签: c

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

   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;
  }

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

问题是最后一行,我不想换行。

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

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

6 个答案:

答案 0 :(得分:7)

有几个简单的答案:

一个。当你到达列表末尾时,用一个换行符截断文件。

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

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

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

答案 1 :(得分:4)

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

fprintf (pFile, "%s%s", (i > 0 ? "\n" : ""), mystring);

答案 2 :(得分: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");
}

答案 3 :(得分:0)

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

答案 4 :(得分:0)

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

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

    fprintf(pFile, "%s", mystring);
    for(i = 1 ; i <  10 ; i++)
    {
        fprintf(pFile, "\n");
        fprintf(pFile, "%s", mystring);
    }
    fclose (pFile);

答案 5 :(得分:0)

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

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);
}