[COLOR="Red"]input>>mas.code;[/COLOR]
[COLOR="RoyalBlue"]cout<<"\t "<<mas.code;[/COLOR]
//input>>mas.mark;
cout<<"\t "<<mas.mark;
input>>mas.datem;
cout<<"\t\t "<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
Проблемма с выводом из файла на C++
Задание такое - нужно создать маленькую базу данных в одну табличку, на основе структуры(у меня база по автомобилям), сама база храниться в текстовом файле.
Поля моей структуры:
code - код автомобиля(те проще код товара)
mark - марка автомобиля
data - дата когда произведен автомобиль
price - соответственно цена на него
и coutry - страна производитель
Должны быть реализованны запись в фаил, вывод из него, поиск по базе. У меня как раз проблема с поиском, точнее с последующим выводом на экран найденной информации. Когда я произвожу поиск по коду автомобиля на экран все выводиться коректно. А вот если начинаешь искать по другим полям на экран выодиться какая-то билиберда. Например когда ищешь по марке, он почему то вместо когда автомобиля выводит на экран первые два числа даты создания, соответственно дату он выводит без этих двух чисел. Мне кажеться проблемма в том что он начинает читать не с начала файла.
Сразу прошу прощения за кривоватый код:). Зарание спасибо:)
#include <stdio.h>
#include <conio.h>
#include <string.h>
#include <stdlib.h>
#include<fstream>
#include <iomanip>
#include<iostream>
using namespace std;
struct carinfo
{
int code;
char mark[30];
char datem[20];
long int price;
char country[20];
};
void create(carinfo *mas,int n)
{
int i=0,q=1;
ofstream output;
output.precision(0);
output.setf(ios::fixed);
output.open("base.txt");
if(!output.is_open()){cout<<"Error, no file";exit(1);}
for(i=0;i<n&&q!=0;i++)
{
q=1;
cout<<"Vvedite code machin"<<endl;
cin>>mas.code;
cout<<endl;
output<<"\t"<<mas.code<<"\t";
cout<<"Vvedite marku avtomobily"<<endl;
cin>>mas.mark;
cout<<endl;
output<<"\t"<<mas.mark<<"\t";
cout<<"Vvedite datu proizvodstva"<<endl;
cin>>mas.datem;
cout<<endl;
output<<"\t"<<mas.datem<<"\t";
cout<<"Vvedite cenu"<<endl;
cin>>mas.price;
cout<<endl;
output<<"\t"<<mas.price<<"\t";
cout<<"Vvedite stranu proizvoditel"<<endl;
cin>>mas.country;
cout<<endl;
output<<"\t"<<mas.country<<"\n";
cout<<"Want you contineu? 1-yes, 0-no"<<endl;
cin>>q;
}
output.close();
}
void readb(carinfo *mas,int n)
{
int i=0;
//cout.precision(1);
cout.setf(ios::fixed);
cout.setf(ios::left);
ifstream input;
input.open("base.txt");
input.precision(1);
if(!input.is_open())
{
cout<<"Error no file"<<endl;
exit(1);
}
/*for(i=0;i<n-1;i++)
{
input>>mas[i+1].code;
int imin=i;
for(j=i+1;j<n;j++)
{
if(mas[j].code<mas[imin].code) imin=j;
buf=mas.code;
mas.code=mas[imin].code;
mas[imin].code=buf;
}
}*/
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
for(i=0;i<n;i++)
{
input>>mas.code;
cout<<"\t "<<mas.code;
input>>mas.mark;
cout<<"\t "<<mas.mark;
input>>mas.datem;
cout<<"\t\t "<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
input.close();
}
void search(carinfo *mas,int n)
{
int i,q,k=0;
ifstream input;
input.open("base.txt");
input.precision(1);
if(!input.is_open())
{
cout<<"Error no file"<<endl;
exit(1);
}
cout<<"\tSEARCH MENU"<<endl;
cout<<"\tPo kakomu polu ichem"<<endl;
cout<<"\t1:Po codu"<<endl;
cout<<"\t2:Po marke"<<endl;
cout<<"\t3:Po date"<<endl;
cout<<"\t4:Po cene"<<endl;
cout<<"\t5:Po strane"<<endl;
cin>>q;
switch(q)
{
case 1: int s1;
cout<<"Vvedite code"<<endl;
cin>>s1;
for(i=0;i<n;i++)
{
input>>mas.code;
if(mas.code==s1)
{
k++;
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
//input>>mas.code;
cout<<"\t "<<mas.code;
input>>mas.mark;
cout<<"\t "<<mas.mark;
input>>mas.datem;
cout<<"\t\t "<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
}
if(k==0) cout<<"Sovpadeniy net"<<endl;
k=0;
break;
case 2: char s2[30];
cout<<"Vvedite marku"<<endl;
cin>>s2;
for(i=0;i<n;i++)
{
input>>mas.mark;
if(strcmp(mas.mark,s2)==0)
{
k++;
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
input>>mas.code;
cout<<"\t "<<mas.code;
//input>>mas.mark;
cout<<"\t "<<mas.mark;
input>>mas.datem;
cout<<"\t\t "<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
}
if(k==0) cout<<"Sovpadeniy net"<<endl;
k=0;
break;
case 3: char s3[20];
cout<<"Vvedite datu"<<endl;
cin>>s3;
for(i=0;i<n;i++)
{
input>>mas.datem;
if(strcmp(mas.datem,s3)==0)
{
k++;
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
input>>mas.code;
cout<<"\t "<<mas.code;
input>>mas.mark;
cout<<"\t "<<mas.mark;
//input>>mas.datem;
cout<<"\t\t "<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
}
if(k==0) cout<<"Sovpadeniy net"<<endl;
k=0;
break;
case 4: long int s4;
cout<<"Vvedite cenu"<<endl;
cin>>s4;
for(i=0;i<n;i++)
{
input>>mas.price;
if(mas.price==s4)
{
k++;
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
input>>mas.code;
cout<<"\t "<<mas.code;
input>>mas.mark;
cout<<"\t "<<mas.mark;
input>>mas.datem;
cout<<"\t\t "<<mas.datem;
//input>>mas.price;
cout<<"\t\t"<<mas.price;
input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
}
if(k==0) cout<<"Sovpadeniy net"<<endl;
k=0;
break;
case 5: char s5[20];
cout<<"Vvedite stranu"<<endl;
cin>>s5;
for(i=0;i<n;i++)
{
input>>mas.country;
if(strcmp(mas.country,s5)==0)
{
k++;
cout<<"\t____________________________________________________________________\n";
cout<<"\t||CODE\t||\tMARK\t||\tDATE\t||\tPRICE\t||COUNTRY ||\n";
cout<<"\t====================================================================\n";
input>>mas.code;
cout<<"\t "<<mas.code;
input>>mas.mark;
cout<<"\t\t"<<mas.mark;
input>>mas.datem;
cout<<"\t\t"<<mas.datem;
input>>mas.price;
cout<<"\t\t"<<mas.price;
//input>>mas.country;
cout<<"\t "<<mas.country<<endl;
}
}
if(k==0) cout<<"Sovpadeniy net"<<endl;
k=0;
break;
default: q=0; break;
}
}
int main()
{
int p;
const int n=5;
carinfo *mas=new carinfo [n];
for(;;)
{
cout<<"\n\tMAIN MENU"<<endl;
cout<<"\t1:Enter cars"<<endl;
cout<<"\t2:Read base"<<endl;
cout<<"\t3:Search"<<endl;
cout<<"\t4:Exit"<<endl;
cin>>p;
switch(p)
{
case 1: create(mas,n);
break;
case 2: readb(mas,n);
break;
case 3: search(mas,n);
break;
case 4: exit(1);
break;
default: cout<<"Vvedite chislo ot 1 do 4"<<endl;
}
p=0;
}
delete [] mas;
return 0;
}
br />
[ /code]
Код:
поясните этот код, я чего то не понял, что вы этим хотели написать
Все спасибо за то что посмотрели:). Я нашел как исправить. Но программу переделаю, попробую по другому ввод/вывод в файл сделать.