所以我有一个项目,我正在创建一个允许用户写入文件的程序,如下所示:
#include <stdio.h>
#include <stdlib.h>
FILE *fd;
FILE *fw;
struct store
{
char Word[512];
char NWord[512];
}
stock;
struct store2
{
char Definition[512];
}
stock2;
char done='y';
int count=1;
int c=0;
int d=0;
int main(void)
{
fw=fopen("Test Z W.txt","w");
fd=fopen("Test Z D.txt","w");
do
{
printf("Word %d: ",count);
gets(stock.Word);
while((c= getchar()) != '\n' && c != EOF);
printf("Definition %d: ",count);
gets(stock2.Definition);
while((c= getchar()) != '\n' && c != EOF);
fprintf(fw,"%s\n", stock.Word);
fprintf(fd,"%s\n", stock2.Definition);
count=count+1;
system("cls");
}
while (count<11);
fclose(fd);
fclose(fw);
return 0;
}
这段代码很好,但是,我想扩展它,以便有一个选项来编辑一个选定的行,而不是擦除整个文件并再次写入所有内容。
我所要做的就是使用 How do you write to a specific line of a txt file in C?
由于我无法回答问题并将其导入我的代码,因此无论如何都不是很有帮助,无论哪种方式都可以轻松修复如下所示的错误。
1
2
Three
4
5
6
7
8
9
10
将自动询问用户他们想要编辑哪一行。
答案 0 :(得分:0)
#include <stdio.h>
int main()
{
FILE *fp,*fc;
int lineNum; //stores line number which should be edited.
int count=0; //count number lines in source file.
int ch; //temporary place to store character of source file(one at a time).
int edited=0; //0=false and 1=true
int t; //temporary place to store input which you want to be replaced with error in text file.
fp=fopen("source.txt","r");
fc=fopen("target.txt","w");
if(fp==NULL||fc==NULL)
{
printf("\nError...cannot open/create files");
return 1;
}
printf("\nEnter Line Number Which You Want 2 edit: ");
scanf("%d",&lineNum);
while((ch=fgetc(fp))!=EOF)
{
if(ch=='\n') //counts number of lines
count++;
if(count==lineNum-1 && edited==0) //if specific line(error line) is found and that line is still not edited. More Explanation:- If we want to edit 3rd line than we should start writing at the end of 2nd line(hence count==lineNum-1) and edited==0 means that error line is still not edited.
{
printf("\nEnter input to store at line %d:",lineNum);
scanf(" %c",&t); //You can replace this statement with any input operation which you want to replace it with the error line.
if(count==0) //if its the first line to edit..
fprintf(fc,"%s\n",t) //watch closely,no '\n' before %s,This will copy without creating a extra newline in beginning of new file.
else
fprintf(fc,"\n%s\n",t); //stores input at error line in file fc(target.txt) from variable t.
edited=1; //this prevents loop to execute more than once(as error is already edited),so there will be no need to execute this loop till the end of program
while( (ch=fgetc(fp))!=EOF ) //Actually this loop will skips the existing line in source.txt(see below)
{ //we want to skip this line because this is error line.
if(ch=='\n')//this will break when next new line(after error line is skipped) is found.
break;
}
}
else
fprintf(fc,"%c",ch);
}
fclose(fp);
fclose(fc);
if(edited==1)
printf("\nCongrates...Error Edited Successfully.");
else
printf("\nLine Not Found");
return 0;
}
此程序将打开一个源文件(可能有错误,我称之为source.txt *)并继续逐个字符地读取它并写入新文件(target.txt)直到(找到了EOF。但是它会停在特定的行,并要求用户在新的文本文件(target.txt)中输入一些代替错误的数据(来自源文件的错误行)。
所以最后你会得到target.txt文件没有错误。打开并检查它。
在这个程序中我假设我们只想在第3行替换单个字符。但是你可以改变这个操作来用字符串,浮点数或整数等替换它。
以下是输出: -
输入您想要的行号2编辑:3
在第3:3行输入要存储的输入
祝贺......错误编辑成功。
target.txt的内容: -
1
2
3
4
5
6
7