这是代码:
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循环并没有退出,但是我不确定为什么。如果是由其他原因引起的问题,请告诉我。谢谢!
答案 0 :(得分:2)
sizeof(bank)
不提供数组中元素的数量,而是完整对象的大小(以字节为单位)。这将大于元素的数量,因为每个元素都是一对,包含至少一个字节大小的多个子对象。因此,您的循环越界并导致未定义的行为。
自C ++ 17起,您可以使用({#include<iterator>
预先)获取数组中的元素数:
std::size(bank)
,或者您可以使用std::array
而不是普通数组(事先为#include<array>
)。它具有成员函数.size()
,该函数将返回元素数。