argon bulletin board

Факултети => Факултет по математика и информатика => Темата е започната от: my_form в 08.03.2008, 00:32:45

Титла: Файлове в С++
Публикувано от: my_form в 08.03.2008, 00:32:45
Имам проблем с настройването на 2 елементарни програмки на С - едната създава файл, а другата трябва да го прочете. При четенето ми се отпечатва един елемент повече (повтаря се последния). Ако някой може да ми даде съвет как да поправя кода ще му бъда много благодарна. Използвам среда DEV C++. Ето какъв е кода:

//create file
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
    fstream g;
    cout<<"Syzdavane na file"<<endl;
    g.open("opit.txt",ios::out);
    string a;
    int phone;
    for (int i=1;i<=3;i++){
    cout<<"ime:";cin>>a;
    g<<a<<endl;
    cout<<"telefon:";cin>>phone;cin.get();
    g<<phone<<"\n";
}
    g.close();
    return 0;
}   


//read file
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   fstream g;
   string st;
   int num;
   g.open("opit.txt",ios::in);
   while(!g.eof())
    {  g>>st; cout<<st<<"  ";
       g>>num; cout<<num<<"\n";
    }
    g.close();
    system("pause");
    return 0;
}
Титла: Re: Файлове в С++
Публикувано от: antoniy в 08.03.2008, 10:46:52
Ползвай g.read() метода и проверявай дали не връща NULL. Ако е NULL по време на четене прекратяваш цикъла отвътре. Приеми го като второ условие за край на файл. :)

Поправка: Може да си ползваш и потока, за да не се затормозяваш с излишно ограничаване на размера. Ето как ще стане примерно:

//read file
#include <iostream>
#include <fstream>
using namespace std;
int main()
{
   fstream g;
   string st;
   int num;
   g.open("opit.txt",ios::in);
   while(!g.eof())
    { 
       if(!(g>>st)) {
         break;
       }

       cout<<st<<"  ";
       g>>num; cout<<num<<"\n";
    }
    g.close();
    system("pause");
    return 0;
}

Поздрави,
Антоний
Титла: Re: Файлове в С++
Публикувано от: my_form в 08.03.2008, 11:40:35
Много съм благодарна за помощта! Поздрав от мен!

http://www.youtube.com/watch?v=Qf8Y9dEqvUM