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

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

Восстановить пароль Регистрация
 
MatMatRix
 Аватар для MatMatRix
1 / 1 / 0
Регистрация: 13.03.2013
Сообщений: 24
07.09.2013, 14:46     Ошибка в задаче про банкомат (снова работа со строками) #1
Ещё одна задача - на этот раз про банкомат, где надо использовать конструкцию 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: Извините за беспокойство - ошибку нашла. Можете удалять тему.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.09.2013, 14:46     Ошибка в задаче про банкомат (снова работа со строками)
Посмотрите здесь:

C++ Работа со строками, вылетает ошибка
Все та же работа со строками (ошибка) C++
Ошибка в задаче про массивы C++
C++ ошибка в задаче на палиндром
работа со строками, ошибка в коде C++
Ошибка в задаче C++
C++ Банкомат. В чем ошибка?
C++ И снова работа со строками

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ответ Создать тему
Опции темы

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