Вам просто нужно добавить '\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"
, поскольку вы пишете текст в файл, а на некоторых платформах файл будет иметь проблемы при открытии его в текстовом редакторе.
Это делает новую строку после fprintf(), но мне нужно поместить пользовательский ввод в новую строку в конце файла. – Carel155
Ну, попробуйте 'fprintf (fp," \ n% d ", number)' – RiggsFolly
@ Carel155 вам просто нужно прочитать документацию, например, ваш 'fseek()' очень прост, как этот 'fseek (fp, 0L, SEEK_END); '. Вместо сложного кода, который вы написали. –