gpt4 book ai didi

c - 函数中的 scanf 似乎将垃圾值写入一个数组而不是另一个数组,尽管两者是相同的

转载 作者:太空宇宙 更新时间:2023-11-04 06:49:38 25 4
gpt4 key购买 nike

所以在 getRoster 函数中,我有两个数组,它们在 main 中以相同的方式定义并以相同的方式调用。但出于某种原因,其中一个 scanf 函数将垃圾数据写入数组,因此在第 91 行(本例中为调试行)中,一个值是我输入的值,另一个值看似随机。我已经从上到下检查了这段代码,看看是否有任何符号添加到一个数组而不是另一个,但我似乎找不到一个。

#include <stdio.h>
#include <stdlib.h>

void getRoster(int *jerseyNumbers[10], int *playerRatings[10])
{
int i;
for (i=0; i<5; ++i)
{
printf("Enter player %d's jersey number\n", i+1);
scanf("%d", &jerseyNumbers[i]);
printf("Enter player %d's rating\n", i+1);
scanf("%d", &playerRatings[i]);
}
}

void updateRating(int *jerseyNumbers[10], int *playerRatings[10])
{
int i, n = -1, hold;
printf("Enter a jersey number:\n");
scanf("%d", n);
for (i=0; i<5; ++i)
if(jerseyNumbers[i]==n)
hold = n;
if (n=-1);
printf("Error");

printf("Enter a new rating for player:\n");
scanf("%d", &playerRatings[n]);
}

void aboveRating()
{

}

void replacePlayer()
{

}

void outputRoster(int *jerseyNumbers[10], int *playerRatings[10])
{
int i;
for (i=0; i<5; ++i)
{
printf("Player %d -- Jersey number: %d , Rating: %d \n", i+1, jerseyNumbers[i], playerRatings[i]);

}

}

void menu(int *jerseyNumbers[10], int *playerRatings[10])
{
char menuInput;
printf("\nMENU\n");
printf("u - Update player rating\n");
printf("a - Output players above a rating\n");
printf("r - Replace player\n");
printf("o - Output roster\n");
printf("q - Quit\n");
printf("\nChoose an option:\n");


scanf(" %c", &menuInput);
if (menuInput == 'u')
{updateRating(&jerseyNumbers[10], &playerRatings[10]);
}
else if (menuInput == 'a')
{aboveRating();
}
else if (menuInput == 'r')
{replacePlayer();
}
else if (menuInput == 'o')
{outputRoster(&jerseyNumbers[10], &playerRatings[10]);
}
else if (menuInput == 'q')
printf("Reached Quit");
else
printf("Input Error\n");

}

int main()
{
int *jerseyNumbers[10];
int *playerRatings[10];
char menuInput;
int quitFlag = 0;
getRoster(&jerseyNumbers[10], &playerRatings[10]);
printf("%d %d", jerseyNumbers[0], playerRatings[1]);
menu(&jerseyNumbers[10], &playerRatings[10]);

return 0;
}

最佳答案

请参阅@NaveenKumar 和@DeiDei 对您的问题的评论。其实你的程序逻辑是没问题的。但是你出错的地方是关于你如何声明数组并将它们作为参数传递给函数的语法。我在下面列出了要进行的更改:

  1. 首先,Dylan,不要将数组声明为:int
    *jerseyNumbers[10]
    int *playerRatings[10]。对于您实际需要的常规数组,只需声明为:

    一个。 *jerseyNumbers*playerRatings... 删除尺码。或者

    jerseyNumbers[10]playerRatings[10]...从声明中删除 *

  2. 当您将这些数组作为参数传递给函数时,永远不要像您那样传递它。只需将数组名称作为参数传递即可。像这样:getRoster(jerseyNumbers, playerRatings);menu(jerseyNumbers, playerRatings);
  3. 在函数定义中,代表数组的参数应该是*arraynamearrayname[size]。由于我们在声明时使用了第一个,所以在这里使用相同的如下:

    void getRoster(int *jerseyNumbers, int *playerRatings) {...},

    void updateRating(int *jerseyNumbers, int *playerRatings){...},

    void outputRoster(int *jerseyNumbers, int *playerRatings) {...},

    void menu(int *jerseyNumbers, int *playerRatings) {...}

  4. 正如@PaulSm4 建议的那样,不要在 if 条件语句的末尾使用分号。虽然这不是您的问题的原因,但这是您需要遵循并避免错误的做法。

我附上了下面的工作代码以及输出。

代码:

#include <stdio.h>
#include <stdlib.h>

void getRoster(int *jerseyNumbers, int *playerRatings)
{
int i;
for (i=0; i<5; ++i)
{
printf("Enter player %d's jersey number\n", i+1);
scanf("%d", &jerseyNumbers[i]);
printf("Enter player %d's rating\n", i+1);
scanf("%d", &playerRatings[i]);
}
}

void updateRating(int *jerseyNumbers, int *playerRatings)
{
int i, n = -1, hold;
printf("Enter a jersey number:\n");
scanf("%d", n);
for (i=0; i<5; ++i)
if(jerseyNumbers[i]==n)
hold = n;
if (n=-1)
printf("Error");

printf("Enter a new rating for player:\n");
scanf("%d", &playerRatings[n]);
}

void aboveRating()
{

}

void replacePlayer()
{

}

void outputRoster(int *jerseyNumbers, int *playerRatings)
{
int i;
for (i=0; i<5; ++i)
{
printf("Player %d -- Jersey number: %d , Rating: %d \n", i+1, jerseyNumbers[i], playerRatings[i]);

}

}

void menu(int *jerseyNumbers, int *playerRatings)
{
char menuInput;
printf("\nMENU\n");
printf("u - Update player rating\n");
printf("a - Output players above a rating\n");
printf("r - Replace player\n");
printf("o - Output roster\n");
printf("q - Quit\n");
printf("\nChoose an option:\n");


scanf(" %c", &menuInput);
if (menuInput == 'u')
{updateRating(jerseyNumbers, playerRatings);
}
else if (menuInput == 'a')
{aboveRating();
}
else if (menuInput == 'r')
{replacePlayer();
}
else if (menuInput == 'o')
{outputRoster(jerseyNumbers, playerRatings);
}
else if (menuInput == 'q')
printf("Reached Quit");
else
printf("Input Error\n");

}

int main()
{
int jerseyNumbers[10];
int playerRatings[10];
char menuInput;
int quitFlag = 0;
getRoster(jerseyNumbers, playerRatings);
printf("%d %d", jerseyNumbers[0], playerRatings[1]);
menu(jerseyNumbers, playerRatings);
return 0;
}

输出:

Enter player 1's jersey number  
1
Enter player 1's rating
10
Enter player 2's jersey number
2
Enter player 2's rating
20
Enter player 3's jersey number
3
Enter player 3's rating
30
Enter player 4's jersey number
4
Enter player 4's rating
40
Enter player 5's jersey number
5
Enter player 5's rating
50

1 20

MENU

u - Update player rating
a - Output players above a rating
r - Replace player
o - Output roster
q - Quit

Choose an option: o
Player 1 -- Jersey number: 1 , Rating: 10
Player 2 -- Jersey number: 2 , Rating: 20
Player 3 -- Jersey number: 3 , Rating: 30
Player 4 -- Jersey number: 4 , Rating: 40
Player 5 -- Jersey number: 5 , Rating: 50

希望这对您有所帮助。

关于c - 函数中的 scanf 似乎将垃圾值写入一个数组而不是另一个数组,尽管两者是相同的,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53293666/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com