bueno, pues según lo que leí el freopen sirve para abrir un archivo y asignarlo para el flujo de datos de entrada o de salida, por ejemplo, yo lo estoy usando para llenar unas matrices en un programa que intenta resolver algun sudoku, y mi problema es que no se como cerrar el archivo, y como lo asigno para que de ahi vengan los datos de entrada, pues ya no puedo aplicar algo para que el usuario salga del programa sin matarlo.
y esa es mi duda, como cerrar un archivo o volver a que los datos de entrada entren por el teclado y no por el archivo.
Por si lo quieren revisar, este es el codigo del programa, aun me falta mucho, pues ahora solo resuelve sudokus faciles, ya despues le intentare meter backtracking, pero por ahora es solo esto
y los archivos sudoku y config contienen:
sudoku.txt
y
config.txt
y esa es mi duda, como cerrar un archivo o volver a que los datos de entrada entren por el teclado y no por el archivo.
Por si lo quieren revisar, este es el codigo del programa, aun me falta mucho, pues ahora solo resuelve sudokus faciles, ya despues le intentare meter backtracking, pero por ahora es solo esto
Código (cpp) [Seleccionar]
#include <iostream>
using namespace std;
int sudoku[9][9], matriz[9][9], seguros[9][9], posible=0, unicas=1;
bool usado[10];
void imprimir();
void unicas_soluciones();
void comprobar(int a, int b);
int main()
{
freopen("sudoku.txt","r",stdin);
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
cin>>sudoku[i][j];
}
}
freopen("config.txt","r",stdin);
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
cin>>matriz[i][j];
}
}
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
if(sudoku[i][j]==0)seguros[i][j]=0;
else seguros[i][j]=1;
}
}
imprimir();
unicas_soluciones();
imprimir();
while(cin.get() != '\n')
setbuf(stdin, '\0');
cin.get();
return 0;
}
void comprobar(int a, int b){
int sub_matriz=matriz[a][b];
int cont=0;
if(seguros[a][b]==0){
for(int i=0; i<10; i++){
usado[i]=0;
}
for(int i=0; i<9; i++){
usado[sudoku[a][i]]=1;
usado[sudoku[i][b]]=1;
}
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
if(sub_matriz==matriz[i][j]){
usado[sudoku[i][j]]=1;
}
}
}
if(unicas==1){
for(int i=0; i<10; i++){
if(usado[i]==0)cont++;
}
if(cont==1){
posible=1;
cout<<"Posibles para "<<b+1<<","<<a+1<<endl;
for(int i=0; i<10; i++){
if(usado[i]==0){
seguros[a][b]=1;
sudoku[a][b]=i;
cout<<i<<endl;
}
}
}
}
}
}
void unicas_soluciones(){
posible=0;
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
comprobar(i,j);
}
}
cout<<"_________________"<<endl;
if(posible!=0) unicas_soluciones();
unicas=0;
}
void imprimir(){
int counta=0,countb=0;
for(int i=0; i<9; i++){
for(int j=0; j<9; j++){
cout<<sudoku[i][j];
counta++;
if(counta==3||counta==6)cout<<" ";
}
if(counta==9)counta=0;
countb++;
if(countb==3||countb==6)cout<<endl;
cout<<endl;
}
}
y los archivos sudoku y config contienen:
sudoku.txt
Código [Seleccionar]
0 0 0 0 4 3 0 0 6
0 0 0 0 0 0 4 8 0
2 4 8 0 0 0 0 0 7
3 2 0 0 0 6 8 0 9
1 8 0 3 0 0 6 0 2
6 0 0 0 0 0 7 3 5
0 7 0 0 0 0 5 6 0
5 0 2 6 0 0 0 0 3
8 6 0 0 5 0 0 0 0;
y
config.txt
Código [Seleccionar]
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
1 1 1 2 2 2 3 3 3
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
4 4 4 5 5 5 6 6 6
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9
7 7 7 8 8 8 9 9 9;