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

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

Войти
Регистрация
Восстановить пароль
 
MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
#1

Ошибка в задаче про банкомат (снова работа со строками) - C++

07.09.2013, 14:46. Просмотров 284. Ответов 0
Метки нет (Все метки)

Ещё одна задача - на этот раз про банкомат, где надо использовать конструкцию map. Задача состоит в том, что надо вывести ответ на каждую из операций, запрашиваемых у банкомата. Программу я написала (с учётом определённых требований к её оформлению):

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
#include<iostream>
#include<string>
#include<map>
#include<algorithm>
#include<stdlib.h>
using namespace std;
 
int main(){
 
    unsigned long N; map<string, unsigned long> b; //Число операций и "карта" с данными об "именах" владельцев карт и счёте.
 
    cin>>N;
    cin.sync();
    for(unsigned long i=1;i<=N;i++){
            string f,name,ct; char oper; unsigned long pay, pi;
 
            getline(cin,f); //Вводим строку, где через пробел написали "имя" владельца, операция (узнать баланс, пополнить счёт или снять деньги) и количество денег, если надо сделать две последние операции.
            name=f.substr(0,5); //Выясняем "имя".
            oper=f[6]; //Операция.
            if(f.length()>7) {ct=f.substr(8); //Деньги.
            pi=0;
            for(int j=0;j<=ct.length()-1;j++){
                int d;
 
                d=ct[j]-'0';
                pi=pi*10+d;
            } // Перевод строки в число.
            pay=pi;
}
            if(b.find(name)==b.end()){
                b.insert(pair<string, unsigned long>(name,0));
                if(oper=='-') cout<<"FAIL"<<endl;
                else if(oper=='+') {b[name]=pay; cout<<"OK"<<endl;}
                else cout<<"UNKNOWN"<<endl;
            }
            else{
                if(oper=='+') {b[name]=b[name]+pay; cout<<"OK"<<endl;}
                else if(oper=='-') {
                    if(b[name]>=pay){b[name]=b[name]-pay; cout<<"OK"<<endl;}
                    else cout<<"FAIL"<<endl;
                }
                else cout<<b.find(name)->second<<endl;
            }
            f.clear(); name.clear(); ct.clear();
        }
 
    return 0;
}
Она работает у меня во всех случаях, кроме того, когда запрашивается операция "узнать баланс" (то есть '?'), - программа у меня почему-то вылетает, выбрасывая мне окно "string subscript out of range". Проверяла, что у меня записывается в строку f и в переменную oper - вроде всё нормально. Где тут у меня ошибка?

UPD: Извините за беспокойство - ошибку нашла. Можете удалять тему.
1
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 14:46
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Ошибка в задаче про банкомат (снова работа со строками) (C++):

И снова работа со строками - C++
Всем привет! У меня есть поле ввода и кнопка. Если поле не заполненное, то по нажатию кнопку вылезет сообщение &quot;M&quot;, если в поле что то...

Ошибка при использовании оператора for в задаче с символьными строками - C++
При использовании оператора for, цикл почему-то первый раз дублируется, и вместо B раз получается b-1. Фэйл происходит в этом цикле. ...

Ошибка в задаче про массивы - C++
Написал прогу,строго не судите,но какой то косяк здесь не знаю даже где,она должна Найти сумму элементов массива, которые находятся ...

Работа со строками, вылетает ошибка - C++
Здравствуйте товарищи! В общем задание такого, посчитать слова в строке, у которых первая и последняя буква одинаковы (Привер: faaaaf) ...

Все та же работа со строками (ошибка) - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &lt;stdio.h&gt; #include &lt;stdlib.h&gt; using namespace std; int Proc(char *main) { ...

работа со строками, ошибка в коде - C++
#include &lt;iostream&gt; #include &lt;cstring&gt; using namespace std; class str{ char *a; int n; public: str(); ...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.09.2013, 14:46
Привет! Вот еще темы с ответами:

Банкомат. В чем ошибка? - C++
Лимит времени 2000/4000/4000/4000 мс. Лимит памяти 65000/65000/65000/65000 Кб. Автор: Фёдор Меньшиков, ВГПУ. Реальный текст...

Снова про переполнение массива - C++
#include &lt;iostream&gt; using namespace std; int main () { char ar; cin &gt;&gt; ar; cout &lt;&lt; ar; return 0; ...

Бесконечный цикл в задаче про вырубку леса - C++
Вырубка леса Фермер Николай нанял двух лесорубов: Дмитрия и Федора, чтобы вырубить лес, на месте которого должно быть кукурузное поле....

Указатель и снова про русский язык в консоли - C++
Здравствуйте.Указатель не возвращает русские буквы. Пишу что то на русском, возвращает набор символов, на анг все норм. Как можно...


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

Или воспользуйтесь поиском по форуму:
Ответ Создать тему
Опции темы

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