Привет, ребят! У меня вопрос. Почему в коде ниже 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
. Не уверен, что именно так будет всегда и везде, скорее всего с другим компилятором и другой архитектурой вы получите какой-то иной эффект.
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Не могу понять зачем такое объединение двух объектов разного или одного типа, в один объект? И чем это отличается от map? И как или какой смысл...
Только начал изучать С++, возникла сложностьНеобходимо присвоить определенному элементу массива значение