Необходимо забить числа в матрицу 9х9. Но почему-то циклы работают не
правильно. Судя по выводу программы обращение к последнему элементу
строки происходит по два раза. Как следствие, отсутствуют числа 9,
19, 29... И последние несколько ячеек остаются пустыми. Кто мне
объяснит, что я не так сделал? Есть смутное ощущение, что я не понял
насчет локальных переменных и области действия, но курение манов не
помогло.
# include <stdio.h>
int field[9][9];
void init_fields (void) {
int horizontal = 0;
int vertical = 0;
int zahl = 0;
int i;
int j;
for (i = 1; i < 10; i++) {
for (j = 1; j < 10; j++) {
field[vertical][horizontal] = zahl++;
horizontal++;
}
horizontal = 0;
vertical++;
}
}
void print_ships (void) {
int horizontal = 0;
int vertical = 0;
int i;
int j;
for (i = 0; i < 10; i++) {
for (j = 0; j < 10; j++) {
printf (" %d \n", field[vertical][horizontal]);
horizontal++;
}
horizontal = 0;
vertical++;
}
}
int main () {
init_fields();
print_ships();
printf (" %d \n", field[0][7]);
printf (" %d \n", field[0][8]);
printf (" %d \n", field[0][9]);
printf (" %d \n", field[0][10]);
printf (" %d \n", field[0][86]);
printf (" %d \n", field[0][90]);
printf (" %d \n", field[0][95]);
}
# include <stdio.h>
int field[9][9];
void
init_fields (void)
{
int zahl = 0;
int i;
int j;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
field[i][j] = zahl++;
}
}
}
void
print_ships (void)
{
int i;
int j;
for (i = 0; i < 9; i++)
{
for (j = 0; j < 9; j++)
{
printf (" %d \n", field[i][j]);
}
}
}
int
main ()
{
init_fields ();
print_ships ();
}
> должен содержать 100 элементов от 0 до 99. Или я туплю?
Число в скобках - количество элементов в массиве. int[9] - девять элементов в массиве (с индексами от 0 до 8), int[10] - десять (индексы от 0 до 9), ну и т.д.
>Переполнения нет. Просто я перескакиваю на строку ниже.
вот только не надо так делать, только людей насмешишь. надо писать простой код для работы с простыми структурами данных. на данный момент у тебя не получилось ни то, ни другое.
>После всего что ту написали, скажу: работайте с одномерными массивами:
угу... опережая вопрос "почему" отвечу... память линейна (точнее виртуальная адресация), посему все ваши хитрые телодвижения по приданию измерений для машины побоку :)
А вот тут неверно. есть разница между массивом указателей имассивом чисел. во втором случае формально говоря не обязательно данные все вместе стыкуются. да и бегать так, чтобы минимум промохов по кэшу было в случае линейного массива прощще.