fprintf()在文件的新行上

时间:2015-03-15 16:37:41

标签: c

如何在fxtf()用户输入文本的文件末尾创建一个新行? 我现在的代码是:

#include <stdio.h>
#include <stdlib.h>

int main()
{
    int lines;
    int number;
    FILE *fp;
    printf("Insert random number: ");
    scanf("%d", &number);
    fp = fopen("textfile.txt", "r");
    char ch;
    while((ch=fgetc(fp))!=EOF)
    {
        if (ch=='\n') {
            lines++;
        }
    }
    fclose(fp);
    fopen("textfile.txt", "ab");
    fseek(fp, lines, SEEK_SET);
    fprintf(fp,"%d", number);
    fclose(fp);
}

1 个答案:

答案 0 :(得分:2)

您只需要'\n'添加fprintf(),就像这样

fprintf(fp,"\n%d", number)
/*           ^  */

但您还需要进行大量错误检查,例如fopen()在无法打开文件时返回NULL

您的代码实际上非常破碎,您使用"r"计算打开的文件中的行,即读取,然后使用fopen()调用"ab"但丢弃返回值,然后fseek()行数,fseek()表示字符数不是行数,然后你写入关闭的fp指针,因为

fopen("textfile.txt", "ab"); /* you don't assign the return value anywhere */
fseek(fp, lines, SEEK_SET);  /* this is the same pointer you `fclosed()'   */
/*         ^ this will not seek to the end of the file                     */
fprintf(fp,"%d", number);    /* here `fp' is still invalid                 */

测试此

#include <stdio.h>
#include <stdlib.h>

int main()
{
    FILE       *file;
    const char *filename = "textfile.txt";


    printf("Insert a number: ");    
    if (scanf("%d", &number) != 1)
     {
        fpritnf(stderr, "invalid input, expected a number\n");
        return -1;
     }
    file = fopen(filename, "a");
    if (file == NULL)
     {
        fprintf(stderr, "cannot open %s for appending\n", filename);
        return -1;
     }
    fprintf(file, "\n%d", number);
    fclose(file);

    return 0;
}

如果您使用fseek()打开,则不需要"a",因为新内容会附加到文件的末尾,如果有用户输入,则需要'\n'文件中没有'\n',或者您想要在新行中强制使用新值。

您不需要模式字符串中的"b",因为您正在将文本写入文件,并且在某些平台上,当您在文本编辑器中打开文件时,该文件会出现问题。