ПРИМЕЧАНИЕ: исходный вопрос изменялся много, много раз, и код менялся так же часто, внося новые ошибки в каждую итерацию. Я оставляю этот ответ, так как он ответил на оригинальный код, смотрите историю. Ниже этого ответа есть обновление, дающее советы вместо кода, так как здесь это более уместно.
Хм, Астандер убрал свой ответ. Но, возможно, это то, что вы должны иметь: *
char getCategory(float height,float weight)
{
char invalid = '\0';
if(height<=0 || weight<=0)
return invalid;
return 'c'; /* do something for the valid cases */
}
* Первоначально вопрос содержал height || weight <= 0
и не имел значения для переменной invalid
.
Примечания к коду:
При правильном отступе поток вашей программы становится понятнее. Я исправил ваше if-утверждение, предполагая, что это действительно было вашим намерением. Последняя строка должна содержать то, что вы в данный момент не указали в своем вопросе. Я добавил инициализацию в первой строке, потому что иметь значение лучше, чем не иметь значение (что означает: если вы не инициализируете, это может быть что угодно, на самом деле).
В своем телефонном коде вы можете сделать это:
Category = getCategory(height, weight);
if(Category == 0)
printf("invalid");
else
printf("%c", Category);
, который фактически выводит слово "invalid" на вывод, если это было ваше намерение.
Обновление: на основе нового текста в вопросе, ясно, что спрашивающий хочет что-то еще, так что вот новый ответ. Я оставляю вышеупомянутое, это все еще действует с оригинальным вопросом.
Теперь вы просите , а не напечатать слово "invalid", а not , чтобы использовать специальное значение для неверного регистра. Вместо этого вы просите вернуть "invalid"
, что, как я понимаю, возвращает строку со значением «invalid» (которая сама по себе возвращает специальное значение).
Вы не можете сделать это
Короче говоря: вы не можете этого сделать. Текущая функция имеет тип возврата char
. Я не знаю цели вашей функции, но я уверен, что вы обдумали это, и есть причина для использования char
. Символ может содержать только один символ. И слово «недействительный» состоит из нескольких символов. У вас есть несколько вариантов, выберите тот, который вам больше подходит:
Другие способы
- изменить тип возвращаемого значения на
string
вместо char
, для этого требуется перепроектирование всего задействованного кода;
- согласиться с возвратом специального значения. Вы не показываете тело своей функции, но если она обычно не возвращает
\0
, вы можете использовать это значение, как в моем примере выше. Конечно, вы можете выбрать любой другой символ;
- вызвать исключение и использовать попытку / поймать в теле. Но вы используете C, а не C ++. Вот ссылка, которая описывает использование обработки исключений в стиле C ++ для C , но это может быть немного за пределами, изучение C может быть лучше предпринято на небольшом шаге в то время.
Что обычно является лучшей практикой
В обычных ситуациях обычно выбирают либо значения специального случая (типичные для более старых или более базовых языков, таких как C или ассемблер), либо исключения (типичные для более структурированных языков, таких как C ++, Java, Python). Обычно считается плохой практикой изменять целую функцию для особых случаев (например, неверный ввод).
Почему
Вместо этого вызывающая функция должна иметь дело с этими особыми случаями. Причиной этого является очень важное правило в программировании: функция никогда не может заранее знать, что пользователи этой функции хотят делать, когда происходит что-то плохое (недопустимый ввод). Один может распечатать «Неверный ввод» (для пользователей командной строки), другой хочет выйти из программы (для в библиотеке), а другой хочет игнорировать и ничего не делать (для автоматической обработки). Короче говоря: то, что вы пытаетесь достичь, вы должны попытаться достичь по-другому (см. Выше вариант 2 и 3, и мое первоначальное решение).
Учителя и учебники
Использование этого подхода является наиболее простым и понятным для любого (будущего) сотрудника, поскольку оно следует общепринятым компьютерным практикам. Конечно, я не видел ваше задание или учебник, поэтому я не могу сказать, в каком направлении они хотят найти решение, и это будет не первый учебник или учитель, который первым укажет вам неправильный путь, пусть дрожит и затем покажу вам правильный путь.