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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Смирняга
69 / 14 / 1
Регистрация: 29.12.2010
Сообщений: 339
#1

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

30.10.2012, 23:38. Просмотров 617. Ответов 3
Метки нет (Все метки)

Вот ВЕСЬ код:

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-я строчка)
Надо заменить на что-нибудь другое
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.10.2012, 23:38
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Чтение из файла, не используя getline (C++):

Getline чтение из файла - C++
#include &lt;iostream&gt; using std::cout; using std::cin; using std::endl; using std::ios; using std::cerr; #include &lt;fstream&gt; ...

Чтение из файла: getline() не работает - C++
У меня такая ситуация: Есть два файла: words1.txt и cities-source.txt. Прилагаются. Берем первую строку из words1 и начинаем...

Чтение с текстового файла getline()-ом - C++
Приветствую Всех! У меня возникла проблема с getline() Я должен прочитать из текстового файла строки по порядку в цикле...

Как начать чтение файла сначала после Getline с первой строчки в fstream? - C++
Пишу программу,которая читает строки их текстового файла и передаёт их в поле Edit1 поочерёдно,по нажатию кнопки.Когда строки...

Чтение из файла в список (двунаправленный), используя структуру - C++
Добрый день, немного запутался со списками, и файлом... Будьте добры, помогите разобраться. Есть файл, считываю информацию в список, а...

Чтение файла в массив символов используя fstream - C++
Добрый день. Нужно считать файл в массив символов(vector). Использую fstream.

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

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

string, getline() чтение строк - C++
Здравствуйте, помогите пожалуйста написать часть кода. Задача состоит в том, чтобы прочитать данные из строк, отдельные поля дат отделяются...

Чтение текстовых файлов для новичков (getline) - C++
Задача чтения и обработки текстового файла - одна из самых распространенных. Она сравнительно проста, но у новичков порой возникают...

Считывание из файла строк с getline() - C++
Код из интернета, который работает у автора, но не у меня. Ошибка: Call to undefined function 'getline' Прототип писать не стал, так...

Перегруженная getline, считывание файла - C++
хочу в классе объявить и определить две функции: одна получает на вход имя файла(пока задала имя в явном виде) а вторая считывает этот...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
31.10.2012, 00:28
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru