【发布时间】:2019-10-24 22:41:36
【问题描述】:
前言:这个问题是针对我在大学的 C 类入门课程的一个项目。我是 Stack Overflow 的新手,如果格式和细节不够充分,我深表歉意。这个程序是用 C 语言编写的,用于编辑足球运动员列表。我不允许使用结构。效率不分级。没有给出与问题无关的代码。
该项目列出了用户可以输入以执行特定任务的输入值菜单。该程序具有三个并行数组:names、nums 和 rating。如果用户在被要求选择一个选项时键入“a”, 程序将提示用户输入姓名、球衣号码和等级以分别添加到数组中。
我正在使用布尔值来检查 nums[] 是否有任何等于 -1 的值。如果是这样,bool isFull 将评估为 false。如果没有,程序将输出“The Roster is full.\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;
}
【问题讨论】:
-
您为 10 个空槽中的每一个设置了相同的数据。成功设置空槽后,在 for 循环中添加一个中断