argon bulletin board

Експертно търсене  

Новини:

Регистрирането на нови потребители е временно деактивирано.

Автор Тема: Файлове в С++  (Прочетена 1002 пъти)

my_form

  • Неактивен Неактивен
  • Публикации: 45
Файлове в С++
« -: 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;
}
Активен

antoniy

  • Управител
  • *
  • Неактивен Неактивен
  • Публикации: 723
    • http://antoniy.net/
Re: Файлове в С++
« Отговор #1 -: 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;
}

Поздрави,
Антоний
« Последна редакция: 08.03.2008, 10:54:54 от antoniy »
Активен
Too short signature limits.

my_form

  • Неактивен Неактивен
  • Публикации: 45
Re: Файлове в С++
« Отговор #2 -: 08.03.2008, 11:40:35 »

Много съм благодарна за помощта! Поздрав от мен!

http://www.youtube.com/watch?v=Qf8Y9dEqvUM
Активен