Форум программистов, компьютерный форум CyberForum.ru

Чтение из файла, не используя getline - C++

Восстановить пароль Регистрация
 
Смирняга
68 / 13 / 1
Регистрация: 29.12.2010
Сообщений: 339
30.10.2012, 23:38     Чтение из файла, не используя getline #1
Вот ВЕСЬ код:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <Windows.h>
using namespace std;
 
const double Tier1E = 0.059;//Tier 1: First 700 KWH used
const double Tier2E = 0.065;//Tier 2: Next 800 KWH used
const double Tier3E = 0.073;//Tier 3: Additional KWH over 1500 KWH
 
const double Tier1W = 0.0021;//Used less than 8,000 gallons
const double Tier2W = 0.0029;//Used at least 8,000 gallons, and less than 15,000 gallons
const double Tier3W = 0.004;//Used at least 15,000 gallons
 
 
const double fee = 4.81;//Residential units are charged a $4.81 service fee, and business units are charged a service fee that is twice the residential unit fee.
 
double count_energy(int cnt);
double count_water(int cnt);
int parse_cnte(string& s);
int parse_cntw( string& s );
void parse(double *output, string& s);
 
int main()
{
 
    ifstream sr("UTILITY.TXT");
    ofstream swu("UNITS.TXT");
    ofstream swc("CUSTOMERS.TXT");
 
 
    if ( !sr.is_open() )
    {               
        cerr<< "There is no file there!\n";
        Sleep(2000);
        return 0;
    }
    else
    {
 
        string s;//string
        string cust_code = "";//customer code
        char condition//Good or Past due
            , type;//residential or business
        double total_cost,//total cost of the customer 
            coste, //cost for electricity for unit
            costw, //cost for water for unit
            total_city = 0;//total cost of the city
        int cntw,//count of the water(galons)
            cnte;//count of the electricity(KWH)
        double realfee;//fee for each unit
        int count_screen = 0;//how much lines now in the screen
 
 
        
        while (getline(sr,s) )
        {
            if (count_screen == 0)
            {
                cout << "Customer\tUnits\tUtility\nCode    \tOwned\tCharges\n--------\t------\t-----------\n";
            }
            count_screen++;
 
            cust_code = s.substr(0, 8);
            condition = s[9];
            s.erase(0, 11);
            int cnt_units = 0;//count of the units for each customer
            total_cost = 0;
            while (s.length() > 0)
            {
                //
                type = s[0];
                s.erase(0, 2);
                cnte = parse_cnte(s);
                s.erase(0, s.find(' ') + 1);
 
                cntw = parse_cntw(s);
                if (s.find(' ') != string::npos)
                    s.erase(0, s.find(' ') + 1);
                else
                    s = "";
                coste = count_energy(cnte);
                costw = count_water(cntw);
                //
 
 
                if (type == 'R')
                    realfee = fee;
                else
                    realfee = fee * 2;
                swu << type <<  " " << fixed << setprecision(2) << ( costw + coste + realfee ) << '\n';
                total_cost +=  ( costw + coste + realfee );
                cnt_units++;
            }
            swc << cust_code << " " << fixed << setprecision(2) << total_cost << '\n';
 
            total_city += total_cost;
 
            cout   << cust_code << "\t   "  << cnt_units << "\t$    " << fixed << setprecision(2) << total_cost ;
            if(condition=='G')
            {
                cout   << "\n";
            }
            else
            {
                cout   << "\t\t"<<"**PAST DUE" <<"\n";
            }
            if (count_screen == 20)
            {
                Sleep(5000);
                system("cls");
                count_screen = 0;
            }
        }
        cout << "-----------------------------------\n";
        cout << "Total City Collected\t" << "$    "  << fixed << setprecision(2)<< total_city  << "\n";
        swc.close();
        swu.close();
        sr.close();
 
    }
 
 
    system("pause");
}
 
double count_energy(int cnt)
{
    double res = 0;//result of this function
    if (cnt <= 700)
    {
        res += cnt * Tier1E;
    }
    else if (cnt <= 800 + 700)
    {
        res += 700 * Tier1E + (cnt - 700) * Tier2E;
    }
    else
    {
        res += 700 * Tier1E + 800 * Tier2E + (cnt - 700 - 800) * Tier3E;
    }
    return res;
}
 
double count_water(int cnt)
{
    double res = 0;//result of this function
    if (cnt <= 8000)
    {
        res = cnt * Tier1W;
    }
    else if (cnt <= 15000)
    {
        res = cnt * Tier2W;
    }
    else
    {
        res = cnt * Tier3W;
    }
    return res;
}
 
int parse_cnte(string& s)
{
    return atoi(( s.substr(0, s.find(' ') + 1)).c_str());
}
 
int parse_cntw( string& s )
{
    if ( s.find(' ') != string::npos )
    {
        return atoi(( s.substr(0, s.find(' ') + 1)).c_str());
    }
    else
    {            
        return atoi( s.c_str());
    }
}

Исправить нужно пару строчек, так, чтобы заменить getline на что-нибудь своё. Преподаватель не разрешает использовать getline

Добавлено через 1 минуту
C++
1
 while (getline(sr,s) )
(58-я строчка)
Надо заменить на что-нибудь другое
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.10.2012, 00:09     Чтение из файла, не используя getline #2
C++
1
2
3
4
5
while (sr.get((char*)s.c_str(), 255)
{
    sr.get();
...
}
Смирняга
68 / 13 / 1
Регистрация: 29.12.2010
Сообщений: 339
31.10.2012, 00:28  [ТС]     Чтение из файла, не используя getline #3
не работает
Если не сложно, вы можете вставить в полный код, м б я что-то не так делаю

Добавлено через 14 минут
Все, спасибо)
C++
1
2
3
4
5
6
7
 while (!f.eof())
  {
   s="";
   while((ch=f.get())!='\n' && ch!=EOF)
   {
    s=s+ch;
   }
Вот так запилил
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.10.2012, 00:28     Чтение из файла, не используя getline #4
Прошу прощения. Вариант не подойдёт. В коде нужно со string работать, а тут чтение будет в некий массив идти.
Yandex
Объявления
31.10.2012, 00:28     Чтение из файла, не используя getline
Ответ Создать тему
Опции темы

Текущее время: 03:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru