Практика двумерной аранжировки - PullRequest
1 голос
/ 13 ноября 2009

Во-первых, извините за мой плохой язык. Я использую VC ++ Express.

Сейчас я учусь об аранжировках. Книга дала мне такой проект:

  • Сделать матрицу 5х5.
  • Каждый столбец для предметов (4 из них)
  • Каждый ряд предназначен для студентов (таких же, 4 из них)
  • Каждая ячейка сохраняет счет.
  • В конце каждой строки / столбца суммируйте строку / столбец.

альтернативный текст http://img2.dcinside.com/viewGimage.php?no=2abcdc2aead569e96abec2b447826b2e8a31ed2bd95886ec8f7114dea41c5e0b50a950ba41f8c050e72c590e2df7750ec3b6ad8afa0bf7f7de8c653d99d03a

А это моя программа ответов:

int main(void)
{
int arr[5][5];
int i,j;

while(1)
{
    printf("student: 1.Jim,2.Jombi,3.Joly,4.Moran if you done, type 0\n");
    scanf("%d", &i);

    if(i=0)
        break;

    printf("subject: 1.english,2.spanish,3.poolish,4.flash\n");
    scanf("%d", &j);

    printf("insult score!\n");
    scanf("%d", arr[i-1][j-1]);//insulting score
}

for(i=0;i<4;i++)//initialization of sum parts
{
    arr[i][4]=0;
    arr[4][i]=0;
}

for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        arr[4][i]+=arr[j][i];

for(i=0;i<4;i++)
    for(j=0;j<4;j++)
        arr[i][4]+=arr[i][j];


for(i=0;i<5;i++)
{
    for(j=0;j<5;j++)
        printf("%d ",arr[i][j]);//printing result
    printf("\n");
}
return 0;
}

Я совершенно не знаю, почему этот код не работает. Даже когда я попробовал только «время», это тоже не сработало. Почему это?

Ответы [ 4 ]

2 голосов
/ 13 ноября 2009

Как уже указывалось, у вас if неправильно

if (i == 0)
/*   ^^^ */

И у вас тоже scanf неправильно

scanf("%d", &arr[i-1][j-1]);
/*         ^^^ */

И вы действительно, действительно, ДЕЙСТВИТЕЛЬНО должны инициализировать массив чем-то (возможно, нулями)

int arr[5][5] = {0};
1 голос
/ 13 ноября 2009
if(i=0)

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

if(i==0)
0 голосов
/ 13 ноября 2009

Пара баллов:

  • В вашем вызове scanf() отсутствует оператор & (address-of), поэтому вместо него вы передадите целое число в массиве.
  • Подумайте о том, чтобы просто выполнить memset(arr, 0, sizeof arr); перед циклом ввода, чтобы убедиться, что массив чист, а не вложенные for s для обнуления только сумм. Безопаснее, короче, легче понять.
  • Добавьте инструментарий, такой как печать матрицы после шага ввода, чтобы убедиться, что она выглядит хорошо.
0 голосов
/ 13 ноября 2009

Индекс в вашем последнем цикле for является одноразовым. Должно быть 4, вы используете 5.

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