我正在学习C函数并尝试编写一个简单的脚本,根据用户输入的数字输出lettergrade。然而,我收到以下错误,我无法弄清楚我缺少的地方......
102809.c: In function ‘function_points’:
102809.c:44: error: ‘lettergrade’ redeclared as different kind of symbol
102809.c:41: error: previous definition of ‘lettergrade’ was here
102809.c:47: error: ‘A’ undeclared (first use in this function)
102809.c:47: error: (Each undeclared identifier is reported only once
102809.c:47: error: for each function it appears in.)
102809.c:49: error: syntax error before ‘lettergrade’
如果你能提供指导,我将不胜感激。我将此脚本与简单的C函数脚本进行比较,它们看起来很相似:(
#include<stdio.h>
#include<stdlib.h>
//prototype
int function_points (char);
int main (void)
{
//use a do or while loop to continue asking for user input, asking user to input test score.
//0 = quit
int points; //this is student's points, we call this via scanf
int counter; //our counter variable to increase loop
char lettergrade;
counter = 0;
do {
printf("Enter the student's points: (0 to quit): ");
scanf("%d", &points);
printf("%d points = %c grade \n", points, function_points(lettergrade)); //declare function
counter++;
} while (points != 0);
//counter --;
printf("Press any key to continue...");
getchar();
getchar();
return 0;
}
//function definition
int function_points (char lettergrade)
{
int points;
char lettergrade;
if (points < 90 && points > 100)
lettergrade = A;
else if (points < 80 && points > 89
lettergrade = B;
else if (points < 70 && points > 79
lettergrade = C;
else if (point < 60 && point > 69)
lettergrade = D;
else
{
lettergrade = F;
}
return lettergrade;
}
答案 0 :(得分:10)
此:
int function_points (char lettergrade)
{
int points;
char lettergrade;
您将函数参数重新声明为局部变量。你不需要这样做(也不能那样做)。只需从上面的代码段中删除最后一行。
您是否偶然使用了一些预先ANSI C的C书(例如K&amp; R 1st ed。)?这个错误看起来像是一个混合的ANSI和旧的K&amp; R声明。如果是这种情况,请查找更新的书籍。
此外,这:
if (points < 90 && points > 100)
lettergrade = A;
else if (points < 80 && points > 89
lettergrade = B;
else if (points < 70 && points > 79
lettergrade = C;
else if (point < 60 && point > 69)
lettergrade = D;
else
{
lettergrade = F;
}
这段代码正如我所写的那样,正试图引用变量 A
,B
,C
等等。您可能想要的是字符 - 那些将是写作'A'
,'B'
,'C'
等 - 单引号。
答案 1 :(得分:3)
答案 2 :(得分:0)
//function definition
int function_points (char lettergrade)
{
int points;
char lettergrade; -- You can not redeclare this lettergrade here.
把它扔出去再试一次。
答案 3 :(得分:0)
除了其他帖子:
lettergrade = F;
语法不正确。那不应该编译。那是你在哪里收到错误 - 编译?
正确的语法是:
lettergrade = 'F';
答案 4 :(得分:0)
a)如果你有一个char作为传递的参数,你不必再重新声明它。删除function_points第2行中的lettergrade声明。
b)没有像A这样的文字。反而使用'A'。
答案 5 :(得分:0)
只是一个小问题,但您在函数中访问的“点”是该函数的本地,而不是Main中的版本。你需要将它传递给points_function才能使用它。
答案 6 :(得分:0)
除了其他答案之外,它看起来好像是function_points()的参数应该是'int points'而不是'char lettergrade',所以你没有在函数中使用未初始化的变量:
int function_points(int points)
{
char lettergrade;
if (points < 90 && points > 100)
lettergrade ='A';
else if (points < 80 && points > 89)
lettergrade = 'B';
else if (points < 70 && points > 79)
lettergrade = 'C';
else if (point < 60 && point > 69)
lettergrade = 'D';
else
{
lettergrade = 'F';
}
return lettergrade;
}
当然,您必须在主函数之前更改声明。在某些条件之后,还有一些缺少密切的括号。
此外,在main()中,您将function_points()的use(调用)标记为声明;这不是宣言。
答案 7 :(得分:0)
你的函数应该返回一个char并接受一个int。或者它可以将char作为数字,而不是ascii,即:
char pointsToLetterGrade(unsigned int points)
{
char returnValue ='A';
// (or you can use a bunch of if branches like in your code snippet)
while (points < 90 && returnValue < 'F')
{
++returnValue;
points += 10;
}
return returnValue;
}
在函数头中,char是返回类型,pointsToLetterGrade是函数名,unsigned int points是函数接收的数据。另外需要注意的是,关于“lettergrade = A;”...计算机将char视为BYTE,它在内存中具有ascii值的数字表示。要将字符视为其ascii值,请用单引号将其括起来。即'L'或'4'或'A'。如果您尝试将“char letter”分配给A,编译器将认为A是变量。
希望这有用。