Попытка создать лучший цикл для именования элементов массива - PullRequest
0 голосов
/ 25 апреля 2018

Я начал изучать массивы и только начал практиковаться, но у меня возникли некоторые проблемы с использованием циклов для именования элементов внутри определенного массива.

Я пытался создать этот фрагмент кода, который присваивал бы числа от 1 до 12 (чтобы напоминать месяцы года) для целых чисел внутри массива, вот что я придумал:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int array[12];

for (int i = 0; i < 12;) {
    cout << "Month number " << i + 1 << endl;
    array[i] = (i++);
}

return 0;
}

Что мне не нравится в этом, так это то, что мне пришлось оставить пространство увеличения / уменьшения внутри цикла for пустым. Сначала я пытался заставить код выглядеть примерно так:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
int array[12];

for (int i = 0; i < 12; i++) {
    cout << "Month number " << i + 1 << endl;
    array[i] = i++;
}

return 0;
}

Но, таким образом, даже если первый элемент массива получился корректным, последующие - нет. Я думаю, что причина этого в том, что i ++ в последнем выражении цикла увеличивает значение i, но я не мог найти способ обойти это без необходимости добавлять еще одну строку с i-- или делать, как я делал в первый код, который я отправил.

Может ли кто-нибудь помочь мне понять, как сделать так, чтобы я мог хранить значение i, увеличенное на единицу, внутри этого конкретного элемента массива, не увеличивая его для всего цикла (если это возможно)?

Я знаю, что есть способы обойти это, точно так же, как я показал в первом коде, который я опубликовал, но это то, что меня беспокоит, и поэтому я хотел бы сделать его более визуально приятным.

Пожалуйста, имейте в виду, что я только начинающий :) Заранее спасибо за ответы и извините за длинный вопрос.

Редактировать: Видимо, кодировка выглядит так:

#include "stdafx.h"
#include <iostream>
using namespace std;

int main()
{
    int array[12];

    for (int i = 0; i < 12; i++) {
        cout << "Month number " << i + 1 << endl;
        array[i] = i + 1;
    }
    cout << array[4] << endl;

    return 0;
}

делает так, чтобы программа работала правильно и выглядела так, как я хотел, но я не могу понять, почему это происходит: (

Редактировать 2: Очевидно, как указал UnholySheep, я упустил тот факт, что + 1 не изменяет значение целого числа, в то время как ++ делает. Спасибо всем, кто ответил и объяснил, как работают ++ и +1!

Ответы [ 2 ]

0 голосов
/ 25 апреля 2018

Просто сделайте i + 1 снова.

for (int i = 0; i < 12; i++) 
{
    cout << "Month number " << i + 1 << endl;
    array[i] = i + 1;
}

Теперь очевидно, что вы действительно хотите начать с 1 и перейти к 12, так что это выглядит несколько лучше с меньшим количеством повторений:

 for (int i = 1; i <= 12; i++) 
 {
     cout << "Month number " << i << endl;
     array[i-1] = i;
 }

РЕДАКТИРОВАТЬ: Что касается вашего редактирования, причина этого заключается в том, что оператор i ++ работает с определенной переменной i.Он увеличивает существующее значение i на единицу, делая его таким, чтобы при следующем обращении к i оно было на 1 больше, чем было раньше.

С другой стороны, запись i + 1 создает совершенно новыйвременный, переменный (фактически постоянный).Поэтому, когда вы пишете

array[i] = i+1; 

, вы говорите, что хотите, чтобы я остался неизменным, но вы хотите создать новое число, на единицу большее, чем i, и поместить это новое число в массив.

Вы можете даже написать это дольше, чтобы быть полностью явным:

int newNumber = i+1;
array[i] = newNumber;
0 голосов
/ 25 апреля 2018
for (int i = 0; i < 12; i++) {
    cout << "Month number " << i + 1 << endl;
    array[i] = i+1;
}

Нет причин увеличивать i в цикле

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