我正在尝试编写一个非常简单的应用程序,允许我输入一个将分配特定等级的数字。
我没有使用C语言,因为我主要使用C#但是我似乎仍然无法绕过错误:
它们都是语法错误,从“if”到“{”,尽管我确信一切都是应该的。
我不明白的是grade = assess(mark);
的“所有类型的非法行为”
部分。
我知道程序可能无法生成正确的输出,但我只是想让它编译。</ p>
感谢您的帮助,我想我正在做一些非常明显的事情。
Task.c
#include <stdio.h>
#include <string.h>
//Protoype
void assess(int* mrk);
// Main method (start point of program)
void main()
{
int mark;
char grade;
printf("enter a word: ");
scanf("%d", &mark);
grade = assess(mark);
printf("That equals ");
printf("%c", grade);
printf(" when marked\n");
}
char assess(int* mrk)
{
char result;
if(mrk > 0 && <= 100)
{
if(mrk < 35)
{
result = "f";
}
if(mrk >= 35 && <= 39)
{
result = "e";
}
if(mrk >= 40 && <= 49)
{
result = "d";
}
if(mrk >= 50 && <= 59)
{
result = "c";
}
if(mrk >= 60 && <= 69)
{
result = "b";
}
if(mrk > 70)
{
result = "a";
}
}
else
{
result = "error";
}
return result;
}
答案 0 :(得分:7)
mrk
被声明为指向int
的指针,但您没有取消引用它。
替换
char assess(int* mrk)
与
char assess(int mrk)
在assess
同样,您将(prototyped)assess
声明为
void assess(int* mrk)
替换为
char assess(int mrk)
接下来,
if(mrk >= 35 && <= 39)
不是合法语法。我知道它看起来像mrk
大于或等于35
且小于或等于39
但你必须对编译器更加明确。所以
替换
if(mrk >= 35 && <= 39)
与
if(mrk >= 35 && mrk <= 39)
,同样贯穿始终。
接下来,在assess
中,您已将result
声明为char
,但您要将char *
分配给结果。取代
result = "f";
与
result = 'f';
同样适用于result
的所有作业。特别是
result = "error";
应该是
result = 'z'; /* 'z' indicates failure */
答案 1 :(得分:2)
您的函数原型是void,实现是char作为返回类型。你也传递一个参数作为指针....你不应该使用指针来传递整数,除非你想要改变传入的int。传递int的指针并不是一个加速,因为你最终传递了一个无论如何,指针与int的大小相同。
答案 2 :(得分:1)
看一下固定版本:
assess
正在使用指向int的指针,但是当你使用参数调用函数作为按值传递而不是传递引用时,不需要它。void
编码函数返回char
,这解释了编译器通知的错误消息。assess
中,对于成绩的引号使用不正确,单引号为char
,双引号为字符串(类型为char string[]
或{ {1}}),函数返回一个字符串类型,根据函数签名与char *ptrStr
返回类型冲突。#include <stdio.h> #include <string.h> //Protoype char assess(int mrk); // Main method (start point of program) void main() { int mark; char grade; printf("enter a word: "); scanf("%d", &mark); grade = assess(mark); printf("That equals "); printf("%c", grade); printf(" when marked\n"); } char assess(int mrk) { char result; if(mrk > 0 && <= 100) { if(mrk < 35) { result = 'f'; } if(mrk >= 35 && <= 39) { result = 'e'; } if(mrk >= 40 && <= 49) { result = 'd'; } if(mrk >= 50 && <= 59) { result = 'c'; } if(mrk >= 60 && <= 69) { result = 'b'; } if(mrk > 70) { result = 'a'; } } else { result = 'n'; } return result; }
希望这有帮助, 最好的祝福, 汤姆。