Предисловие: Этот вопрос относится к проекту для моего вступления в класс C в колледжеЯ новичок в Stack Overflow и прошу прощения, если форматирование и детализация не подходят. Эта программа написана на C и используется для редактирования списка футболистов. Мне не разрешено использовать структуры. Эффективность не оценивается. Код, не связанный с вопросом, не приводится.
В этом проекте перечислены меню входных значений, которые пользователь может ввести для выполнения определенной задачи. Программа имеет три параллельных массива: имена, числа и рейтинги. Если пользователь вводит «а», когда его просят выбрать опцию, программа предложит ему ввести имя, номер майки и рейтинг для добавления в массивы соответственно.
Я использую логическое значение для проверки, имеет ли nums [] какие-либо значения, равные -1. Если это так, bool isFull примет значение false. Если нет, программа выдаст «Список заполнен. \ N». При запуске программы информация 1 игрока может быть добавлена в соответствующие массивы. Однако, хотя массивы имеют длину 10 индексов, когда пользователь выбирает «a» второго типа, программа isFull примет значение true и программа выведет сообщение об ошибке. Почему это так и как я могу решить эту проблему?
#include <stdio.h>
#include <stdbool.h>
#include <string.h>
int findPlayer(int whichPlayer, const int jerseyNumbers[], int maxJersyCount);
int main(void) {
int numToAdd;
double ratingToAdd;
char nameToAdd[100];
int playerFound;
char menuOp = 'x';
bool isFull;
int nums[10] = {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1};
double ratings[10] = {-1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0, -1.0};
char names[10][100] = {"~", "~", "~", "~", "~", "~", "~", "~", "~", "~"};
while (menuOp != 'q') {
printf("\nMENU\n");
printf("a - Add a new player\n");
printf("u - Update player information\n");
printf("r - Remove a player from the roster\n");
printf("d - Display player information\n");
printf("p - Print the full roster\n");
printf("s - Print \"Star\" players\n");
printf("q - Quit\n");
printf("\nChoose an option: ") ;
scanf(" %c", &menuOp);
switch (menuOp) {
case 'a':
printf("Enter player jersey number: ");
scanf("%d", &numToAdd);
playerFound = findPlayer(numToAdd, nums, 10);
if (playerFound != -1) {
printf("Jersey # already in use.\n");
break;
}
printf("Enter player first or nick name: ");
scanf("%s", nameToAdd);
printf("Enter player rating: ");
scanf("%lf", &ratingToAdd);
isFull = true;
for (int i = 0; i < 10; i++) {
if (nums[i] == -1) {
isFull = false;
break;
}
}
if (isFull) {
printf("The Roster is full.\n");
}
else {
for (int i = 0; i < 10; i++) {
if (nums[i] == -1) {
for (int j = 0; j < strlen(nameToAdd); j++) {
names[i][j] = nameToAdd[j];
}
nums[i] = numToAdd;
ratings[i] = ratingToAdd;
}
}
}
break;
}
return 0;
}
int findPlayer(int whichPlayer, const int jerseyNumbers[], int maxJersyCount) {
for (int i = 0; i < maxJersyCount; i++) {
if (jerseyNumbers[i] == whichPlayer) {
return i;
}
}
return -1;
}