Tengo un archivo de texto text.txt que lee (para simplificar)
this is line one this is line two this is line threeNuevamente, por motivos de simplicidad, solo estoy tratando de establecer el primer carácter de cada línea en 'x', por lo que mi resultado deseado sería
xhis is line one xhis is line two xhis is line threeAsí que abro el archivo text.txt e intento sobrescribir cada línea con el resultado deseado en el mismo archivo de texto. En el bucle while, configuro el primer carácter de cada línea en 'x'. También puse la variable "línea" igual a uno, porque si está en la primera línea, quiero rebobinar hasta el principio del archivo para sobrescribir al principio en lugar de al final del archivo. Luego, la línea se incrementa, por lo que omitirá el rebobinado para la próxima iteración, y debería continuar sobrescribiendo las líneas 2 y 3. Funciona perfectamente para la primera línea.
¿Alguien tiene alguna solución? Por cierto, he investigado esto extensamente tanto en stackoverflow como en otros sitios, y no tuve suerte. Aquí está mi código y mi salida también está a continuación:
#include <stdio.h> #include <stdlib.h> #define MAX 500 int main() { char *buffer = malloc(sizeof(char) * MAX); FILE *fp = fopen("text.txt", "r+"); int line = 1; while (fgets(buffer, 500, fp) != NULL) { buffer[0] = 'x'; if (line == 1) { rewind(fp); fprintf(fp, "%s", buffer); } else { fprintf(fp, "%s", buffer); } line++; } free(buffer); fclose(fp); }Producción:
xhis is line one this is line two xhis is line two e xlong pos = ftell(fp);//Save the current position while (fgets(buffer, 500, fp) != NULL) { buffer[0] = 'x'; fseek(fp, pos, SEEK_SET);//move to beginning of line fprintf(fp, "%s", buffer); fflush(fp); pos = ftell(fp);//Save the current position }Siempre sugiero usar otro archivo para hacer este tipo de soluciones.
probar esto
#include<stdio.h> #include<stdio.h> #include<string.h> int main() { char buffer[500],read[50][50]; FILE *fp=fopen("text.txt","r+"); int line =1; while(fgets(buffer,500,fp)!=NULL){ buffer[0]='x'; printf("\n%d ",line); puts(buffer); strcat(read[line-1],(const char*)buffer); line++; } fclose(fp); FILE *fp1=fopen("text.txt","w"); rewind(fp1); fprintf(fp1,"%s",read); return 0; }Resolví esto en Windows