Как написать в конкретную строку файла в c?

Поэтому у меня есть проект, который я делаю, и я создал программу, которая позволяет пользователю писать в файл, как показано ниже:

#include  #include  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; } 

этот код в порядке, однако я хотел бы расширить его, чтобы можно было отредактировать только одну выбранную строку, а не протирать весь файл и снова записать все содержимое.

Все, что мне нужно для работы, это использовать. Как вы пишете в определенную строку txt-файла в C?

Это было не очень полезно, так как я не мог принять ответ и импортировать его в свой код, так как все, что мне нужно, это то, где ошибка, такая как приведенная ниже, может быть легко исправлена.

  1 2 Three 4 5 6 7 8 9 10 

Если пользователю будет автоматически задан вопрос, какую строку они хотят отредактировать.

     #include  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; } в #include  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. но вы можете изменить эту операцию, чтобы заменить ее на строку, float или integers и т. Д.

    Вот результат: –

    Введите номер строки, который вы хотите 2 изменить: 3

    Введите ввод для сохранения в строке 3: 3

    Устанавливает … Ошибки редактируются успешно.

    содержимое target.txt: –

    1

    2

    3

    4

    5

    6

    7