User Name Password Register
DaniWeb IT Discussion Community
All
What is DaniWeb IT Discussion Community?
You're currently browsing the C++ section within the Software Development category of DaniWeb, a massive community of 392,053 software developers, web developers, Internet marketers, and tech gurus who are all enthusiastic about making contacts, networking, and learning from each other. In fact, there are 4,287 IT professionals currently interacting right now! Registration is free, only takes a minute and lets you enjoy all of the interactive features of the site.
Please support our C++ advertiser:
Views: 5149 | Replies: 2
Reply
Join Date: Dec 2004
Location: London or Slovakia
Posts: 2,143
Reputation: peter_budo has a spectacular aura about peter_budo has a spectacular aura about peter_budo has a spectacular aura about 
Rep Power: 10
Solved Threads: 258
Moderator
Featured Poster
peter_budo's Avatar
peter_budo peter_budo is offline Offline
Code tags enforcer

Reading from external data file

  #1  
Dec 11th, 2004
Hi
my name is Peter and I'm looking for somebody who can help me to understand how to read from external file without "destroing" existing inforamtion inside.

whole staff is based on book example which i'm trying to extend.
I have a programm which is working with database of 3 three accounts.
There is no problem to do operation on it(Deposit, Withdraw) and update data file. However if I insert there on start extra line which state how many accounts are there everything gets funy

data file
3 accounts

123 100.0
840 123.5
666 823.9

first number is account number second is current balance

and here is part of code which is looking for information on first line "3"

ifstream accfile;
accfile.open("accounts.dat");

int na; //number of accounts
accfile >> accs[1].accno;
cout << accfile << endl;
getline ( accfile, na);
cout <<"Number of accounts = " << na << endl;

give me error : no matching function for call to `getline (ifstream &, int &)'

if I declare na as string
cout brings "Numbers of accounts = accounts"

this does erease first line
AddThis Social Bookmark Button
Reply With Quote  
Join Date: Nov 2004
Location: Netherlands
Posts: 5,646
Reputation: jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough jwenting is a jewel in the rough 
Rep Power: 18
Solved Threads: 191
Colleague
jwenting's Avatar
jwenting jwenting is offline Offline
duckman

Re: Reading from external data file

  #2  
Dec 11th, 2004
getline as the error says works only with strings.
You'll have to convert them to ints yourself afterwards using atoi.
Reply With Quote  
Join Date: Dec 2004
Location: London or Slovakia
Posts: 2,143
Reputation: peter_budo has a spectacular aura about peter_budo has a spectacular aura about peter_budo has a spectacular aura about 
Rep Power: 10
Solved Threads: 258
Moderator
Featured Poster
peter_budo's Avatar
peter_budo peter_budo is offline Offline
Code tags enforcer

Re: Reading from external data file

  #3  
Dec 12th, 2004
well still doesnt like it, it's saying
49: cannot convert `na' from type `string' to type `const char *'
I tried create another variable type integer and than convert string but than there message
cannot convert `na' from type `string' to type `const char *'

Anything else I can do with it???
Here is code as is look

data file
3 accounts

123 100.5
840 123.43
666 8273.06

program
//account11.cc based on notes from tutorial Peter
#include<iostream.h>
#include<fstream.h>
#include<string>

const int ACC_MAX = 10;
enum TransactionType {Deposit, Withdraw};

struct Account                        //grouping account number and balance under Account{
  int accno;
  double balance;
};
struct Transaction                     //grouping transaction type, account number and amount of money moved{
  TransactionType type;
  int accno;
  double amount;
};

void process(Transaction t, Account& a)       //if deposit add money, if withdraw take out money{
  switch(t.type)
    {
    case Deposit:
      a.balance += t.amount;
      break;
    case Withdraw:
      a.balance -= t.amount;
      break;
    }
}

void main()
{
  Account accs[ACC_MAX];
  int nRead = 0;

  //open the data file
  ifstream accfile;
  accfile.open("accounts.dat");


  string na;                                    //number of accounts
  accfile >> accs[1].accno;
  getline (accfile, ucty);
  atoi(na);  
  cout <<"Reading from first line = " << na << endl;

  do                             //this does counting of accounts but I want to replace with stuff above
    {                                             //where reading from first line says how many accounts are there
    accfile >> accs[nRead].accno >> accs[nRead].balance;
    if(accfile)
      {
	nRead++;
      }
  } while (accfile && nRead < ACC_MAX);
 cout << nRead <<" accounts read\n";

 Transaction trans = {Withdraw, 123, 50.0};          //simple transaction WITHDRAW from account 123
  int a=0;
  for (int i =0; i < nRead; i++)
    {
      if (accs[i].accno == trans.accno)
        {
 	 process (trans, accs[i]);
 	 a = i;
        }
    }


  //check the balance               //print out up-date of account
  cout <<"Account number: " <<accs[a].accno << endl;
  cout <<"Balance is: £" << accs[a].balance << endl;
  accfile.close();

  ofstream oaccfile;                     //save any changes made
  oaccfile.open("accounts.dat");
  for (int i = 0; i < nRead; i++)
    {
      oaccfile << accs[i].accno << " " << accs[i].balance << endl;
    }
   
  oaccfile.close();
}
Reply With Quote  
Reply

Only community members can participate in forum threads. You must register or log in to contribute.

Currently Active Users Viewing This Thread: 1 (0 members and 1 guests)

 

DaniWeb C++ Marketplace
Thread Tools Display Modes

Similar Threads
Other Threads in the C++ Forum

All times are GMT -4. The time now is 11:33 am.
Forum system based on vBulletin Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
©2003 - 2008 DaniWeb® LLC