Программа C для класса: передача массива структуры, дающего странный результат

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

В основном я создаю плоскость массива, которая будет содержать 12 структурных мест.

Затем я назначаю каждую структуру внутри данных плоскости. На данный момент все выглядит хорошо.

Затем я передаю этот массив в numberEmptySeats, и весь внезапный самолет [0].seatID теряется в соусе, а не равен 1, которому он был изначально назначен.

Пожалуйста, помогите мне понять, почему это происходит.

------------- Токовый выход -------------

1
Entering numberEmptySeats
1123456789101112
Seats Available: 12

------------ Желаемый вывод -------------

1
Entering numberEmptySeats
1
Seats Available: 12

Код:

#include<stdio.h>
#include<string.h>
#define SEATS 12

struct seat {
    int seatID;
    int reserved;
    char firstName[20];
    char lastName[20];
};

void resetPlane(struct seat ar[],int seats);
void numberEmptySeats(struct seat ar[],int seats);

int main()
{
    struct seat plane[SEATS];
    resetPlane(plane,SEATS);
    printf("%d\n",plane[0].seatID);
    numberEmptySeats(plane,SEATS);
}

void resetPlane(struct seat ar[],int seats)
{
    int i;
    for(i=0;i<seats;i++)
    {
        ar[i].seatID = i+1;
        ar[i].reserved = 0; 
        strcpy(ar[i].firstName,"Unassigned");
        strcpy(ar[i].lastName,"Unassigned");
    }
}

void numberEmptySeats(struct seat ar[],int seats)
{
    int i,j=0;
    printf("Entering numberEmptySeats\n");
    printf("%d",ar[0].seatID);
    for(i=0;i<seats;i++)
    {
        if (ar[i].reserved == 0)
        {
            printf("%d",ar[i].seatID);
            j++;
        }
    }
    printf("\nSeats Available: %d\n",j);
}

1 ответ

Решение

Вы печатаете идентификатор каждого доступного места, без новой строки после этого после печати первого идентификатора один раз (также без новой строки).

void numberEmptySeats(struct seat ar[],int seats)
{
  int i,j=0;
  printf("Entering numberEmptySeats\n");
  printf("%d\n",ar[0].seatID);   // added newline
  for(i=0;i<seats;i++)
  {
    if (ar[i].reserved == 0)
    {
        // printf("%d",ar[i].seatID);     // drop the extra output
        j++;
    }
  }
  printf("\nSeats Available: %d\n",j);
}
Другие вопросы по тегам