Привет, ребят! У меня вопрос. Почему в коде ниже place_number в конце равен коду последнего символа?
#include <iostream>
using namespace std;
main()
{
int place[3];
int place_number = 0;
char place_value;
while (place_number < 3)
{
place_number = place_number + 1;
cin >> place_value;
place[place_number] = place_value;
}
cout << place[1] << " " << place[2] << " " << place[3] << " " << place_number;
return 0;
}
Пример выполнения:
M
N
L
77 78 76 76
UPD: Вопрос решён!
#include <iostream>
using namespace std;
main()
{
int place[3];
int place_number = 0;
char place_value;
while (place_number < 3)
{
cin >> place_value;
place[place_number] = place_value;
place_number = place_number + 1;
}
cout << place[0] << " " << place[1] << " " << place[2] << " " << place_number;
return 0;
}
У вас ошибка в коде, в С++ массивы начинаются с 0, а не с 1. А у вас place_number равен 1 когда первый раз пытаетесь записать в массив. Измените цикл...
while (place_number < 3)
{
cin >> place_value;
place[place_number] = place_value;
place_number = place_number + 1;
}
или используйте for
for (int place_number = 0; place_number < 3; place_number++) {
cin >> place_value;
place[place_number] = place_value;
}
Массив place содержит три элемента. Поэтому элемента place[3] в нем нет. Но в массивов с++ отсутствует проверка на границы и запись place[3] это просто (place+3*sizeof(int)). А там, по этому адресу совершенно случайно оказался place_number. И его распечатало.
Потому что вы забыли про то, что нумерация массивов начинается с нуля. Вы в теле цикла сначала увеличиваете place_number который является индексом текущего элемента, а только потом пишете в place[place_number] введенное значение. То есть вы сначала пишете значение в
place[1] затем в place[2] а потом в place[3] Но place[3] у вас нет (массив состоит из трех, а не из четырех элементов), поэтому вы пишете значение уже за пределы массива. Следующие 4 байта (или сколько у вас под int) заняты переменной place_number. Не уверен, что именно так будет всегда и везде, скорее всего с другим компилятором и другой архитектурой вы получите какой-то иной эффект.
Сборка персонального компьютера от Artline: умный выбор для современных пользователей