我正在写一个非常简单的编辑器。我有它,所以程序从stdin读取,然后立即打印到stdout(见下面的代码)。我想要一个将接收文件的程序,然后根据命令打印或向文件附加更多文本。在阅读相关问题后,我仍然感到困惑。我是否同时使用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
}
答案 0 :(得分:0)
您的程序没有&#34;从stdin
&#34;读取,它从命名文件中读取,但是,不会写入该文件。
这是另一个混乱
char text[MAX_LINES][MAX_LINES];
这会更好
#define MAX_LINES 10
#define MAX_LENGTH 1000
...
char text[MAX_LINES][MAX_LENGTH];
接下来,看看这个循环
for(count=1; count<MAX_LINES+1; count++)
这将忽略数组的第0个元素并超出最后一个。它应该是
for(count=0; count<MAX_LINES; count++)
这适用于stdin
,但如果文件是已打开的磁盘文件,请说infile
,您应检查读取是否到达文件末尾
fgets(text[count], MAX_LINES, infile);
并替换为
if (fgets(text[count], MAX_LENGTH, infile) == NULL)
break;
您的评论问题是否有办法从infile读取并将文本添加到infile?是的但它不可行,因为@JonathanLeffler写了&#34;准备首先是一个新文件&#34; 。