Работа С Потоками В С++

vladis222

Active Member
06.12.2011
31
0
#1
Здравствуйте! Прошу вашей помощи по такому вопросу: дело в том, что в моей лабораторной работе нужно вывести в файл выходного потока макс.значение. И соответственно,для этого его нужно объявить,как и входной поток. Я объявил его по всем правилам: input ifstr; открыл, считал с него данные. Но, при инициализации выходного потока ofstream outp,и соответственно при выводе инфы в него программа придралась к строке кода с объявлением выходного потока,что невозможно его использовать,ошибка. Скажите пожалуйста в чем может заключаться проблема.

Вот код проги:


#include <iostream>
using namespace std;
#include<fstream>
#include<iomanip>
#include <string.h>
//#include <stdlib.h>
#include <conio.h>

const int N=5;
/*------------------------------------------ объявление глобальных переменных -------------------------------*/
//FILE *fin;
//FILE *fout;
char name_fin[13] = ""; /*имя входного файла*/
char name_fout[13] = ""; /*имя выходного файла*/
ifstream ifstr; /*Объявление входного потока*/
ofstream output; /*Объявление выходного потока*/
/*----------------------------------------------- исходная структура -------------------------------------*/
struct input
{
char name[20];
float tr_1950;
float tr_1957;
float komb_1950;
float komb_1957;
};
/*---------------------------------------------------- результирующая структура -------------------------*/
struct output
{
char name[20];
float abs_prir;
} res;

/*------------------------------- главная функция принимает параметрами входной и выходной файлы -----------------------*/
void main(int argc, char *argv[])
{
setlocale(LC_ALL,"Rus");
struct input table[N];
int count_recs; /*кол-во записей*/
int i;
float max;
cout<<"Enter name of input file :"<<endl;
cin>>name_fin;

/*if(argc == 2)
{ /*задано имя только входного файла*/
//strcpy(name_fin,argv[1]);
// }
// if(argc >= 3)
// { /*заданы имена ивх. и вых. файлов*/
// strcpy(name_fin,argv[1]);
// strcpy(name_fout,argv[2]);
//}
/*---------------------------------------------считывание исходных данных из файла-----------------------------*/
count_recs=0;
ifstr.open(name_fin);
while (ifstr.fail())
{ cout<< "error"<<endl;
cout<<"Enter name of input file :"<<endl;
cin>>name_fin;
}


while(ifstr>>table[count_recs].name>>table[count_recs].tr_1950>>table[count_recs].tr_1957>>table[count_recs].komb_1950>>table[count_recs].komb_1957)
{
cout.setf(ios::left); // выравнивание по левому краю
cout << setw(15) << table[count_recs].name << '!';
cout << setw(5) << table[count_recs].tr_1950 << '!'; // "%-15s!
cout<< table[count_recs].tr_1957 <<" ! "<<table[count_recs].komb_1950 <<"!"<<table[count_recs].komb_1957 <<"!"<< endl;


}// while
count_recs++;
getch();
max=-1;
for(i=0;i<count_recs;i++)
{
if(((table.komb_1957-table.komb_1950)*0,01)>max)
{
max =((table.komb_1957-table.komb_1950)*0,01);
strcpy(res.name, table.name);
res.abs_prir=table.tr_1957-table.tr_1950;
} //if
}// for

//вывод в файл
outp.open(name_fout);
outp<<setw(4)<<res.name<<setw(20)<<res.abs_prir<<endl;

ifstr.close();
output.close();
//}
//------------------------- Ввод имени входящего и выходного файла -----------------------------

cout<<("Enter name of output file :\n");
cin>>name_fout;



//-----------------------------------------------------------------------

}
 

Гость
#2
Все нормально, только нужно внимательней писать!!!
C++:
	//вывод в файл
output.open(name_fout);
output<<setw(4)<<res.name<<setw(20)<<res.abs_prir<<endl;
И ввод названия выходного файла должен быть перед предыдущим кодом.
 

vladis222

Active Member
06.12.2011
31
0
#3
Все нормально, только нужно внимательней писать!!!
C++:
	//вывод в файл
output.open(name_fout);
output<<setw(4)<<res.name<<setw(20)<<res.abs_prir<<endl;
И ввод названия выходного файла должен быть перед предыдущим кодом.
спасибо)))