【发布时间】:2015-01-26 20:25:30
【问题描述】:
我正在编写一个非常简单的编辑器。我有它,以便程序从标准输入读取,然后立即打印到标准输出(参见下面的代码)。我想要一个接收文件的程序,然后根据命令打印或附加更多文本到文件。阅读相关问题后,我仍然很困惑如何做到这一点。我是否同时使用 scanf 来读取文件,然后 printf 打印到同一个文件中?任何澄清都非常感谢。
#include <stdio.h>
#define MAX_LINES 10
char text[MAX_LINES][MAX_LINES];
int main(void){
FILE *infile;
infile = fopen("file.txt", "w");
//check for file
if(infile==NULL){
puts("Error--no file found");
}
int count, x, y;
printf("Enter to quit the program.\n");
for(count=1; count<MAX_LINES+1; count++){
printf("%d: ", count);
fgets(text[count], MAX_LINES, stdin);
}
for(x=0; x<count; x++){
for(y=0;text[x][y];y++){
putchar(text[x][y]);}
putchar('\n');
}
fclose(infile);
return 0;
//end program
}
【问题讨论】:
-
几乎所有编辑器都会打开一个临时文件进行写入,然后在关闭旧文件时取消链接并重命名临时文件。
-
由于
scanf()不关心空白,但编辑文件的人关心,您不太可能使用scanf()。 (是的,您甚至可以解决这个问题,但这是一项艰苦的工作,并没有真正的回报。)您的代码显示您使用fgets(),这是一个更明智的选择。您需要将行数与行的最大宽度分开。您可能需要考虑输入的 POSIXgetline(),因为它可以处理任意长的行。你打开“infile”只写,实际上是从stdin读的。 -
有没有办法既可以从 infile 中读取,又可以将文本添加到 infile 中? (而不是标准输出?)
-
@SarahMarkers 您以写入模式打开 infile,因此您也可以对其进行写入。您可能需要使用
fseek()移动到文件中要写入的位置。您可以使用fputs、fputc、fprintf等函数编写代码。
标签: c file printf scanf text-editor