En un primer vistazo, ya se ven al menos tres errores en tu código:
- La pregunta está etiquetada como c++ pero el código es absolutamente c.
- La cabecera
<stdio.h>
es de C y no debe ser usada en código C++, si es necesario usarla (casi nunca lo es) debe usarse la versión adaptada a C++: <cstdio>
. Lee este hilo para saber más.
- Usas un literal multibyte en lugar de una cadena para comprobar el valor de un carácter… aunque no lo parezca
'mexico'
es un número (no una cadena de caracteres) cuyo valor es dependiente de la implementación del compilador1, pero sea cual sea el valor nunca será el valor de un carácter como car
.
Mientras escribía vi dos errores más:
- Un carácter no es una palabra,
'm'
nunca será "mexico"
.
- Una vez leído un carácter, el puntero de lectura está en el siguiente carácter, por lo que aún suponiendo que leyeses la palabra
"mexico"
si escribes "Mexico"
en la posición de lectura, obtendrás "mMexico"
.
Suponiendo que realmente quisieras programar en C++ (que no lo parece) tu código debería parecerse a:
// Abrir archivo arc.txt
if (std::fstream arc{"arc.txt"})
{
// Leer palabra por palabra.
for (std::string palabra; arc; arc >> palabra)
{
// Si la palabra leída es "mexico"
if (palabra == "mexico")
{
// Rebobina seis caracteres.
arc.seekg(arc.tellg() - 6l);
// Escribe "Mexico".
arc << "Mexico";
}
}
} // El archivo se cierra aquí automáticamente.
Puedes ver el código funcionando en Try it online!.
1Podría ser un número cuya representación binaria tuviera el valor del carácter 'm'
en el byte de mas peso y el valor de 'o'
en el de menos: 6d657869636f16 o 12028257929713510.