基本"C"编程错误 尝试在平均值之前写入玩家姓名



这是我编写的代码。

#include<stdio.h>
int main()
{
char playerName;
int gameScores [10]= {12,5,21,15,32,10};
int totalPoints=0;
int x;
float avg;
for (playerName='A'; playerName<='Z'; playerName=playerName+1)
{
print("%c",playerName);
scanf ("/%s",playerName[x]);
}
putchar('n');
for(x=6; x<10; x++)
{
printf ("What did the player score in game %d?". x+1);
scanf ("%d", &gameScores [x]);
}
for(x=0; x<10; x++)
{
totalPoints +=gamesScores[x];
}

avg=((float) totalPoints/10);
printf("nnThe Play's scoring average is %.1f.n", avg);

return (0)
}

我在22号线附近遇到问题

scanf("/%s",playerName [x]);

它不断出现错误。它表示下标值不是数组、指针或向量。我希望它在平均得分之前列出球员的名字。如果没有scanf,只给我输入上方的字母表,而不是玩家的名字。

char playerName只是一个char,一个字节。C字符串是char的数组,以零(NUL(字符结尾。因此,被视为字符串的单个字符只能包含终止NUL,而不能包含其他字符,也就是说,它只能是空字符串。

您需要将playerName定义为一个足够大的数组,以容纳名称+终止NUL,例如:

#define MAX_NAME_LENGTH 100
char playerName[MAX_NAME_LENGTH + 1];

这对于一个名字来说就足够了,但由于你有多个玩家,你需要这些数组的数组,例如:

#define MAX_PLAYERS 10
#define MAX_NAME_LENGTH 100
char playerName[MAX_PLAYERS][MAX_NAME_LENGTH + 1];

(您也可以动态分配内存,例如使用malloc,但这超出了问题的范围。(

此外,您的scanf在格式字符串中有一个额外的斜杠/,这会导致它失败,除非每个玩家名称的输入前面都有一个斜杠,我猜情况并非如此。也许你要用反斜杠来转义%,但这在这里也不是必需的,因为百分号只是";特别的";在printf/scanf格式字符串中,而不是在C本身中。

在适当的程序中,当使用scanf进行读取时,还需要防止缓冲区溢出。并且应该检查scanf的返回值,以验证输入是否已成功读取(如果未成功读取,则可能重试或中止程序(。有关返回值和参数,请参阅scanf的文档(以及您使用的其他所有函数(。

(总的来说,我建议学习使用fgets将行读取到缓冲区中,因为通常很难以合理的方式从scanf错误中恢复,尤其是当格式字符串变得更加复杂时。(

最新更新