Rema Thomas Ответов: 3

Выведите первую строку в массиве на языке Си


У меня есть код, который должен иметь формат таблицы ниже. У меня есть большая часть написанного кода, но когда я его запускаю, первая строка массива не печатается. Пожалуйста, помогите мне исправить это!

Необходимый формат:
j=   1  2  3  4  5
---+---------------
i=1|-1 -2 -3 -4 -5
2  |-6
3  |-11
4  |-16

Что я получаю в качестве результата:

j=  1  2  3  4  5
---+----------------
i=1|-6
2  |-11
3  |-16
4  |1008754248


Что я уже пробовал:

Это код, который у меня есть до сих пор:

#include <stdio.h>

int main()  {

   int A[4][5] = {
        {-1, -2, -3, -4, -5},
        {-6, 0, 0, 0, 0},
        {-11, 0, 0, 0, 0},
        {-16, 0, 0, 0, 0}
   };
   int i, j;
   printf("j=    "); {
   for (j=0; j<5; j++)  
       printf( " %d  ", j + 1);
       printf( "\n" );
       printf("----+----------------------\n");
     
       for (i=0; i<4; i++)  {
            printf("%d  |%d ", i+1, A[i][j]);
       printf("\n");     
       };
    };
    return 0;
}

3 Ответов

Рейтинг:
0

Rick York

Вы должны были отредактировать свой первый вопрос и продолжить его.

Как бы то ни было, проблема заключается в предпоследнем операторе printf. Вы пытаетесь напечатать[i][j], Но каково же тогда значение j? Последний раз он был установлен предыдущим циклом for, так что он равен 5,что превышает диапазон матрицы A. Установите j обратно в 0 перед этим для цикла, и он должен работать лучше.

-редактировать-

Не обращайте внимания на мое предыдущее решение, так как оно не является правильным в соответствии с логикой, как она есть.

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


W∴ Balboos, GHB

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

Форматирование действительно странное - печать по столбцам вместо строк. Несколько беспорядочно - отображаемый вывод не совпадает с кодом.

Rick York

Теперь вся логика обливается из шланга. Фигурные скобки петли находятся совсем не там, где они должны быть. Это решение просто больше не применяется.

W∴ Balboos, GHB

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

Рейтинг:
0

Patrice T

Во-первых, использование последовательного кодирования&ампер;стиль го вдавливания
Стиль отступа - Википедия[^]
Реальный отступ ваш код:

#include <stdio.h>

int main()  {

    int A[4][5] = {
        {-1, -2, -3, -4, -5},
        {-6, 0, 0, 0, 0},
        {-11, 0, 0, 0, 0},
        {-16, 0, 0, 0, 0}
    };
    int i, j;
    printf("j=    ");
    { // this line have nothing to do here
        for (j=0; j<5; j++) // a { here would be nice
            printf( " %d  ", j + 1);
        // a } here too
        printf( "\n" );
        printf("----+----------------------\n");

        for (i=0; i<4; i++)  {
            printf("%d  |%d ", i+1, A[i][j]);
            printf("\n");
        };
    }; // this line have nothing to do here
    return 0;
}

Цитата:
У меня есть большая часть написанного кода, но когда я его запускаю, первая строка массива не печатается.

Обратите внимание на ценность j когда вы печатаете массив.
Используйте отладчик, чтобы точно увидеть, что делает ваш код.

Ваш код ведет себя не так, как вы ожидаете, или вы не понимаете, почему !

Существует почти универсальное решение: запускайте свой код на отладчике шаг за шагом, проверяйте переменные.
Отладчик здесь, чтобы показать вам, что делает ваш код, и ваша задача-сравнить с тем, что он должен делать.
В отладчике нет никакой магии, он не знает, что должен делать ваш код, он не находит ошибок, он просто помогает вам, показывая, что происходит. Когда код не делает того, что ожидается, вы близки к ошибке.
Чтобы увидеть, что делает ваш код: просто установите точку останова и посмотрите, как работает ваш код, отладчик позволит вам выполнять строки 1 на 1 и проверять переменные по мере их выполнения.

Отладчик - Википедия, свободная энциклопедия[^]

Освоение отладки в Visual Studio 2010 - руководство для начинающих[^]
Базовая отладка с помощью Visual Studio 2010 - YouTube[^]

1.11 — отладка программы (пошаговое выполнение и останова) | выучить C++[^]

Отладчик здесь только для того, чтобы показать вам, что делает ваш код, и ваша задача-сравнить его с тем, что он должен делать.


Рейтинг:
0

CPallini

Обратите внимание на правильную индексацию массива.
Следующая программа

#include <stdio.h>

int main()
{

  int a[4][5] =
  {
    {-1, -2, -3, -4, -5},
    {-6, 0, 0, 0, 0},
    {-11, 0, 0, 0, 0},
    {-16, 0, 0, 0, 0}
  };

  int i, j;

  printf(" \\ j ");
  for (j=0; j<5; j++)
    printf( " %d  ", j + 1);
  printf( "\n" );
  printf("i \\ --------------------\n");

  // first line is the special one
  printf("1  | ");
  for (j=0; j<5; j++)
    printf("%d  ", a[0][j]);
  printf("\n");

  for (i=1; i<4; i++)
    printf("%d  | %d\n", i+1, a[i][0]);
  return 0;
}
выходы
 \ j  1   2   3   4   5  
i \ --------------------
1  | -1  -2  -3  -4  -5  
2  | -6
3  | -11
4  | -16