使用C中的“if”语句编译错误

时间:2010-01-29 02:20:26

标签: c

我正在尝试编写一个非常简单的应用程序,允许我输入一个将分配特定等级的数字。

我没有使用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;
}

3 个答案:

答案 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返回类型冲突。
  • 最后但并非最不重要的是,您返回了一个“错误”,同样是一个字符串类型,我将其设为'n'代表' n ot good'
#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;
}

希望这有帮助, 最好的祝福, 汤姆。