Программа 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);
}