Foros del Web » Programación para mayores de 30 ;) » C/C++ »

ayuda!!!!

Estas en el tema de ayuda!!!! en el foro de C/C++ en Foros del Web. hola a todos!!soy un estudiante de valencia españa y tengo un programa de c++ (ficheros)que no me funciona.Me compila bien con dev c++, pero no ...
  #1 (permalink)  
Antiguo 16/01/2011, 17:26
 
Fecha de Ingreso: enero-2011
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
ayuda!!!!

hola a todos!!soy un estudiante de valencia españa y tengo un programa de c++ (ficheros)que no me funciona.Me compila bien con dev c++, pero no hace lo que quiero que haga lo he intentado mil veces y no se me ocurre. ¿me podriais ayudar? por favor.

El ejercicio trata de varias opciones:
1 poniendo el nombre de la fotocpiadora salga la cantidad que ya existe en el fichero txt.
2 el añadir un nombre y cantidad de fotocpiadora nuevo al fichero.

el fichero stock.txt esta en columna ejemplo:
Hp\n
23\n
epson\n
12\n
Oki\n
9

os dejo el codigo:


#include<fstream>
#include<iostream>
#include<string>

using namespace std;

struct impresoras{
string nombre;
int cantidad;
};

const int MAX=100;
typedef impresoras vector [MAX];
void programa(vector stock, ifstream &f, ofstream &p);

int main(){
ifstream f;
ofstream p;
f.open("stock.txt");
int cont=0;
vector stock;
if(!f )
{
cout<<"Error abriendo el fichero"<<endl;
f.close();

}
else
{
while(!f.eof())
{
getline(f, stock[cont].nombre);
f>>stock[cont].cantidad;
f.ignore();
cont++;

}
programa( stock, f, p);
}
system("PAUSE");
return (0);
}

void programa(vector stock, ifstream &f, ofstream &p){

int opcion, i, cont=0;
string nombre;
do{
cout<<"introduce 1 para obtener el numero de fotocopiadoras"<<endl;
cout<<"intruduce 2 para anyadir nuevo modelo"<<endl;
cout<<"introduce 3 para cerrar el fichero"<<endl;
cin>>opcion;
cin.ignore();
if (opcion==1)
{
f.open("stock.txt");
string nombre,resul;
int i, j, verdad;

cout<<"introduce el modelo de fotocopiadora"<<endl;
getline(cin, nombre);
cin.ignore();
i=0;
j=0;
do{
if(nombre == stock[i].nombre)
{
verdad=1;
}
else
{
verdad=0;
}
resul=stock[i].nombre;
i++;
f.close();
}
while (verdad==0 || i==100);
if(resul==nombre)
{
j=i-1;
cout<<"El numero de fotocopiadoras de ese tipo es: "<<stock[j].cantidad<<endl;
}
else
{
cout<<"El modelo escrito no coincide con ninguno de los que hay en el almacen"<<endl;
}
}
else
{
if (opcion==2)
{
p.open("stock");
string nombre2;
int num;
cout<<"introduce el modelo que quieres añadir"<<endl;
getline(cin, nombre2);

cout<<"introduce el numero de fotocop. en el almacen"<<endl;
cin>> num;
cin.ignore();
p<<nombre2<<endl;
p<<num<<endl;
p.close();
while(!f.eof())
{
f.open("stock");
getline(f, stock[cont].nombre);
f>>stock[cont].cantidad;
//f.ignore();//
cont++;
f.close();

}
}
else
{
if(opcion!=3)
{
cout<<"Debes introducir una de las 3 opciones: "<<endl;
cout<<"introduce 1 para obtener el numero de fotocopiadoras"<<endl;
cout<<"intruduce 2 para añadir nuevo modelo"<<endl;
cout<<"introduce 3 para cerrar el fichero"<<endl;
cin>>opcion;
}
}

}
}
while (opcion!=3);



}
solo por molestaros en leerlo.. muchas gracias!!
  #2 (permalink)  
Antiguo 17/01/2011, 16:16
 
Fecha de Ingreso: enero-2011
Mensajes: 2
Antigüedad: 13 años, 4 meses
Puntos: 0
Respuesta: ayuda!!!!

he cambiado el codigo y ya esta solucionado...(: os subo el codigo por si a alguien le interesa.
#include <iostream>
#include <fstream>
using namespace std;
struct fotocopiadoras {
string nombre;
int cantidad;
};
const int MAX=100;
typedef fotocopiadoras vector[MAX];
void programa(vector, int&);//prototipo

int main (){
ifstream f;
ofstream p;
vector tienda ;
int cont= 0;
int i=0;
f.open("stock.txt");
if(!f) // comprueba si habre el fichero.
cout <<"Error al abrir fichero\n";
else {
while (!f.eof() && cont<MAX){
getline(f, tienda[cont].nombre);
f >> tienda[cont].cantidad; //carga el fichero
f.ignore();
if(!f.eof())
cont ++;
}
programa(tienda, cont); //parametro real
}
f.close();
p.open("stock.txt",ios::app); // se sobre escribe para almacenar los modelos nuevos.
for (i=0; i<cont; i++){
p<<tienda[i].nombre<<endl;
p<<tienda[i].cantidad<<endl;
}
p.close();


system ("PAUSE");
return (0);
}
void programa(vector tienda, int& cont){//parametro formal
string tipo, nombre1;
int i,opcion,cantidad1, variable=0;
bool no_se_encuentra=true;



do{

cout<<"///////////////////////////////////////////////////"<<endl;
cout<<"//(1) para obtener la cantidad de fotocopiadoras//"<<endl;
cout<<"//(2) para nuevo modelo //"<<endl;
cout<<"//(3) para cerrar el fichero //"<<endl;
cout<<"///////////////////////////////////////////////////"<<endl;
cin>>opcion;



switch(opcion){
case 1:
no_se_encuentra=true;
cout<<"introduce el nombre del modelo"<<endl;
cin.ignore();
getline(cin,tipo);
for(i=0; i<cont; i++){// buscamos en el vector
if(tipo==tienda[i].nombre){
variable=i;
cout<<"la cantidad de fotocopiadoras es: "<<tienda[variable].cantidad<<endl;
no_se_encuentra=false;
}
}
if(no_se_encuentra == true)
cout << "No se ha encontrado la impresora"<<endl;
break;
case 2:
cout<<"introduce modelo nuevo"<<endl;
cin>>nombre1;
cout<<"introduce la cantidad"<<endl;
cin>>cantidad1;


tienda[cont].nombre=nombre1;
tienda[cont].cantidad=cantidad1;
cont ++;

break;
}

}
while(opcion!=3);
}

Etiquetas: Ninguno
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 22:02.