Ого, здесь повсюду ошибки !!
Если вы хотите сохранить массив из отдельных символов, просто определите его как:
char y[5];
Теперь следующий бит имеетнесколько проблем:
y[1] == "A";
y[2] == "B";
y[3] == "C";
y[4] == "D";
y[4] == "F";
Помимо очевидного случая, когда вы используете оператор сравнения (==
) вместо присваивания (=
), вы также пытались присвоить строковый литерал для char
массив.Вы не можете сделать это вне определения переменной.Но я утверждаю, что вы не хотите использовать строки.Вы также пропустили y[0]
и удвоились на y[4]
.
Поскольку я уже изменил определение вашего массива, нам нужны символьные литералы (одинарные кавычки).Давайте исправим все этого:
y[0] == 'A';
y[1] == 'B';
y[2] == 'C';
y[3] == 'D';
y[4] == 'F';
Но это так много печатать ... Почему бы не определить это в одной строке, экономя ваши пальцы и делая ваш код более компактным (и на самом делеболее читабельно):
char y[5] = { 'A', 'B', 'C', 'D', 'F' };
Следующая проблема заключается в том, что вы возвращаете y[5]
для оценки 'F', что нехорошо - это доступ вне вашего массива: помните, что индексация начинается с нуляпоэтому действительные индексы варьируются от 0 до 4 включительно.Вы должны проверить все свои индексы, потому что некоторые из них неверны.
Мой последний пункт будет основанным на стиле, и вы можете принять его или оставить.Вместо того, чтобы делать это большое выражение «если», почему бы не поместить все свои баллы отсечки в массив ... Свернув это во все остальное, что я упомянул до сих пор, вы бы получили что-то вроде этого:
char GradeFromPercentage(float score)
{
const char grades[5] = { 'A', 'B', 'C', 'D', 'F' };
const float scores[5] = { 90.f, 70.f, 50.f, 30.f, -FLT_MAX };
for (int i = 0; i < 5; i++)
{
if (score >= scores[i]) return grades[i];
}
// It should not ordinarily be possible to reach here, but you should
// return something anyway. It's possible to get here if you supply
// a score of `NaN`. You may choose to return an invalid grade, or
// 'F' or whatever.
return '\0';
}