Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: sadfud en Noviembre 13, 2016, 03:15:06 PM

Título: Problema con el control de flujo en lectura y escritura de archivos en C++
Publicado por: sadfud en Noviembre 13, 2016, 03:15:06 PM
Buenas underc0deanos, esta vez vengo con un problema al realizar un ejercicio en C++, el enunciado es el siguiente:
Escribe un programa que genere un archivo output.txt en el que aparezcan invertidos los números enteros positivos que haya en otro archivo input.txt. Contempla dos alternativas de formato del fichero input.txt:
• En la primera, cada línea contiene un número entero y termina en una línea con un 0 (centinela). Por ejemplo:
input.txt

1234
56
1000
-987
54321
0
<eof>
output.txt
4321
65
0001
12345
<eof>


El codigo que he escrito es el siguiente:
Código (cpp) [Seleccionar]
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int inverso(int num);
void lectura();
void escritura(int inverso);
int main() {
lectura();
system("pause");
return 0;
}

int inverso(int num) {
int auxiliar = 0;
do {
auxiliar = auxiliar * 10 + (num % 10);
num = num / 10;
} while (num > 0);
return num;
}

void escritura(int inverso) {
ofstream archivo;
archivo.open("output.txt");
archivo << inverso;
archivo.close();
}

void lectura() {
ifstream archivo;
int numero;
archivo.open("input.txt");
while (archivo >> numero){
escritura(inverso(numero));
}
archivo.close();
}


El programa evidentemente no funciona
He colocado un breakpoint en la linea "archivo.open(input.txt);" y en tiempo de ejecuccion obtengo el siguiente error "{_Filebuffer={_Pcvt=0x00000000 <NULL> _Mychar=0 '\0' _Wrotesome=false ...} }"

A alguien se le ocurrre cual puede ser el fallo?

Gracias de antemano
Título: Re:Problema con el control de flujo en lectura y escritura de archivos en C++
Publicado por: grep en Noviembre 15, 2016, 02:12:03 AM
Supongo que el error es que no encuentra el archivo input.txt. Cuando estas depurando un programa C++ en Visual Studio, por defecto el Working Directory es el directorio del proyecto (no el de la solución ni tampoco el directorio Debug).

CitarDebugging category
Working Directory
Specifies the working directory of the program being debugged, relative to the project directory where your EXE is located. If you leave this blank, the working directory is the project directory. For remote debugging, the project directory will be on the remote server.
https://msdn.microsoft.com/en-us/library/kcw4dzyf.aspx

Puedes cambiar el Working Directory ya sea configurando el proyecto o desde el código del programa, o por otro lado podrías direccionar al archivo en base al Working Directory (el path del WD lo puedes obtener con _getcwd() https://msdn.microsoft.com/en-us/library/sf98bd4y.aspx) o con una ruta absoluta (http://stackoverflow.com/a/13218460).

fuente:
http://stackoverflow.com/questions/798798/ifstreamopen-not-working-in-visual-studio-debug-mode

Saludos