почему не выходит из цикла for c ++? - PullRequest
0 голосов
/ 30 декабря 2018

Это код:

pair<string,int> bank[20];
int n, money, people, temp, money_given;
string current_giver, current_receiver;
int main() {
    freopen ("readme.txt","r",stdin);
    cin >> n;
    for (int i =0; i != n; ++i){
        cin >> bank[i].first;

    }
    for (int m = 0; m != n; ++m){

        cin >> current_giver;
        cout << current_giver <<endl;
        cin >> money >> people;
        money_given = money - (money%people);
        //to subtract money
        for (auto j : bank){
            if (j.first == current_giver)
                bank[temp].second -= money_given;
            else
                ++temp;
        }

        temp = 0;
        //to add money
        for (int i =0; i < people ;++i){
            cin >>current_receiver;

            for (int j =0; j <sizeof(bank); ++j){
                if (bank[j].first == current_receiver)
                    bank[j].second += money_given/people;
            }
        }
    }
    **for (auto j : bank){
        cout << j.first << ' ' <<j.second <<endl;
    }**

Секция, выделенная полужирным шрифтом, не будет выполнена, но каждая часть приведенных выше циклов for работает.Я думаю, что второй цикл for не завершается, но я не уверен, почему.Если есть другая причина проблемы, пожалуйста, дайте мне знать.Спасибо!

1 Ответ

0 голосов
/ 30 декабря 2018

sizeof(bank) не дает количество элементов в массиве, но размер полного объекта в байтах.Это будет больше, чем количество элементов, потому что каждый элемент представляет собой пару, содержащую несколько подобъектов размером не менее одного байта.Поэтому ваш цикл выходит за пределы и вызывает неопределенное поведение.

Начиная с C ++ 17, вы можете получить количество элементов в массиве заранее (#include<iterator>):

std::size(bank)

или вы можете использовать std::array вместо простого массива (#include<array> заранее).Он имеет функцию-член .size(), которая будет возвращать количество элементов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...