2015-03-15 2 views
-4

Как я могу создать новую строку в конце файла для fprintf() введенного пользователем текста? Мой код прямо сейчас это:fprintf() в новой строке файла

#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

Вам просто нужно добавить '\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", поскольку вы пишете текст в файл, а на некоторых платформах файл будет иметь проблемы при открытии его в текстовом редакторе.

+0

Это делает новую строку после fprintf(), но мне нужно поместить пользовательский ввод в новую строку в конце файла. – Carel155

+0

Ну, попробуйте 'fprintf (fp," \ n% d ", number)' – RiggsFolly

+0

@ Carel155 вам просто нужно прочитать документацию, например, ваш 'fseek()' очень прост, как этот 'fseek (fp, 0L, SEEK_END); '. Вместо сложного кода, который вы написали. –

Смежные вопросы