如何在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);
}
答案 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"
,因为您正在将文本写入文件,并且在某些平台上,当您在文本编辑器中打开文件时,该文件会出现问题。