Ошибка компилятора при использовании операторов if в C - PullRequest
1 голос
/ 29 января 2010

Я пытаюсь написать очень простое приложение, которое позволяет мне ввести число, которое будет присваивать определенную оценку.

Я не очень часто использовал язык C, так как я в основном использую C #, но я все еще не могу обойти ошибки:

Это все синтаксические ошибки, варьирующиеся от "если" до "{", хотя я уверен, что все так, как и должно быть.

Один из тех, кого я не понимаю, это «недействительная пустота со всеми типами» на grade = assess(mark); раздел.

Я понимаю, что программа может не выдавать правильный вывод, но я просто пытаюсь заставить его скомпилировать.

Спасибо за вашу помощь, я думаю, я делаю что-то действительно очевидное.

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 ]

7 голосов
/ 29 января 2010

mrk объявлен как указатель на int, но вы не разыменовываете его.

Заменить

char assess(int* mrk) 

с

char assess(int mrk)

в определении assess

Аналогично, вы объявили (прототип) 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 * s для результата. Заменить

result = "f";

с

result = 'f';

и аналогично для всех назначений result. В частности

result = "error";

должно быть что-то вроде

result = 'z'; /* 'z' indicates failure */
2 голосов
/ 29 января 2010

Ваш прототип функции недействителен, а реализация - это тип возвращаемого значения.Кроме того, вы передаете параметр в качестве указателя .... вы не должны использовать указатель для передачи целых чисел, если вы не хотите изменить переданное int. Передача указателей для целых чисел не ускорение, так как в конечном итоге вы передаетеуказатель того же размера, что и int в любом случае.

1 голос
/ 29 января 2010

Посмотрите на исправленную версию:

  • Прототип assess использовал указатель на int, но это не было необходимо, поскольку вы вызывали функцию с параметром, который передавал по значению, а не передавал по ссылке.
  • Функция имела неправильный тип возврата, в вашем прототипе у вас было void, но вы закодировали функцию для возврата char, которая объясняет сообщение об ошибке, о котором уведомил ваш компилятор.
  • В функции assess, неправильное использование кавычек для оценок, одинарная кавычка - char, двойная кавычка - строка (тип будет char string[] или char *ptrStr), и функция вернула строковый тип, который вступал в противоречие с типом возврата char согласно сигнатуре функции.
  • Наконец, но не в последнюю очередь, вы вернули «ошибку», снова строковый тип, я сделал так, чтобы это было «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;
}

Надеюсь, это поможет, С наилучшими пожеланиями, Том.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...