Язык C: преобразовать числовую оценку в буквенную оценку - PullRequest
0 голосов
/ 07 мая 2018

Я новичок в программировании (C) и мне нужно выполнить упражнение, в котором я должен создать функцию, которая преобразует оценку европейского стиля (от 1/20 до 20/20) в оценку американского стиля: например, оценка от 16 до 20 будет «А». Я должен интегрировать его в основную программу, которая попросит конвертировать оценку.

Вот что я сделал до сих пор, но это не работает (когда я набираю число от 1 до 20, я получаю «ноль» вместо буквы от А до F):

char chartype;
char convert( int i){
    switch(i){
        case 16 ... 20:
        chartype = "A";
        break;
        case 13 ... 15:
        chartype = "B";
        break;
        case 10 ... 12:
        chartype = "C";
        break;
        case 8 ... 9:
        chartype = "D";
        break;
        case 6 ... 7:
        chartype = "E";
        break;
        case 0 ... 5:
        chartype = "F";
        break;
        default:
        chartype = "X";
        break;      
}
}

char convert (int note);

int main(){

    int note;
    char lettre = convert(note);
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);


    printf("%s\n", lettre);
    return 0;
}

Ответы [ 3 ]

0 голосов
/ 07 мая 2018

В C строки - это символьные массивы, а "___" означает строковый литерал - массив символов. '_' это персонаж. спецификатор формата для символа% c, который записан в printf выражении

Попробуйте это:

char convert( int i){
       if(i>20) return 'X';
       if(i>=16) return 'A';
       if(i>=13) return 'B';
       if(i>=10) return 'C';
       if(i>=8) return 'D';
       if(i>=6) return 'E';
       if(i>=0) return 'F';
       return 'X';
}

int main(){

    int note;
    char lettre;
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);
    lettre = convert(note);

    printf("%c\n", lettre);
    return 0;
}
0 голосов
/ 07 мая 2018

Просто используйте строку для поиска соответствующей записи:

char convert(int numberGrade ){
   if (numberGrade >=0 && numberGrade  <= 20) {
           // 012345678901234567890      
      return "FFFFFFEEDDCCCBBBAAAAA"[numberGrade];
   }
   return 'X'
}

EDIT

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

См. Ниже:

int main(){
    int note;
    printf("Quelle est la note à convertir?\n");
    scanf("%d", &note);
    char lettre = convert(note);

    printf("%c\n", lettre);  // use %c with `char`, not %s
    return 0;
}
0 голосов
/ 07 мая 2018

Это не синтаксис переключателя / регистра в C. Вы должны создать регистр для каждого числа:

switch(i){
        case 20:
        case 19:
        case 18:
        case 17:
        case 16:
        chartype = "A";
        break;
        ...
}

Или проверьте вот так if (i <= 20 && i >= 16)

Существуют и другие ошибки: «А» не совпадает с «А»; вы пытаетесь преобразовать неинициализированное значение; в вашей convert функции

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