Проверка значений ввода - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Всем привет! Снова вопрос, как можно реализовать следующую вещь: Допустим я ввожу какой либо символ из 3 (в моем случае F,C или K) и перед ним цифру. 1 цель: Если буква отличается от F,C или K, (например введу 42G) то он выдает мне "G is not a valid temperature type. Ending program." 2 цель: Если я ввожу не просто цифры и всего лишь одну букву, а ввожу например целое слово (например 420 Blaze), то он выдает "Invalid formatting. Ending program." Мои небольшие старания (необходимая часть программы) в ней только 2 цель реализована:
Листинг программы
  1. void temperature() {
  2. float numerial = 0;
  3. char FirstChoiceTemp = 'o';
  4. printf("Enter the temperature followed by its suffix (F, C, or K): ");
  5. scanf(" %f %c",&numerial,&FirstChoiceTemp);
  6. if( (FirstChoiceTemp == 'K') || (FirstChoiceTemp == 'k') ){
  7. Kelvin(numerial); //вызываем функцию и передаем значение
  8. }
  9. else if( (FirstChoiceTemp == 'C') || (FirstChoiceTemp == 'c') ){
  10. Celsii(numerial);
  11. }
  12. else if( (FirstChoiceTemp == 'F') || (FirstChoiceTemp == 'f') ){
  13. Farenheit(numerial);
  14. }
  15. else {
  16. printf("Invalid formatting. Ending program.");
  17. }
  18. }
В ней реализована только 2 цель, и если я введу 42 G, он не выведет мне ""G is not a valid temperature type. Ending program." Может стоит еще один else if добавить? Хоть я пытался что,то выкрутить с помощью этого, не вышло

Решение задачи: «Проверка значений ввода»

textual
Листинг программы
  1. #include <stdio.h>
  2. #include <string.h>
  3. #include <stdlib.h>
  4. #include <ctype.h>
  5. void temperature();
  6. int main()
  7. {
  8.     temperature();
  9.     return 0;
  10. }
  11. void temperature()
  12. {
  13.     int len = 0;
  14.     double numerial;
  15.     char FirstChoiceTemp[] = "";
  16.     printf("Enter the temperature followed by its suffix (F, C, or K): ");
  17.     if(!scanf("%lf %s",&numerial, FirstChoiceTemp)){
  18.         fprintf(stderr, "Error enter!");
  19.         exit(2);
  20.     }
  21.     len = strlen(FirstChoiceTemp);
  22.     if(len > 1){
  23.         puts("Invalid formatting. Ending program.");
  24.         exit(1);
  25.         }
  26.     else{
  27.         FirstChoiceTemp[0] = toupper(FirstChoiceTemp[0]);
  28.         if(FirstChoiceTemp[0] != 'K' && FirstChoiceTemp[0] != 'F' && FirstChoiceTemp[0] != 'C'){
  29.         printf("'%c' is not a valid temperature type. Ending program.", FirstChoiceTemp[0]);
  30.         exit(1);
  31.         }
  32.     }
  33.     printf("%g  %s\n", numerial, FirstChoiceTemp);
  34. }

Объяснение кода листинга программы

  1. Включаем необходимые заголовочные файлы для работы с вводом/выводом, строками и числами.
  2. Объявляем функцию temperature(), которая будет выполнять проверку ввода температуры.
  3. В функции main() вызываем temperature().
  4. В функции temperature() с помощью scanf() считываем введенное значение температуры и его суффикс.
  5. Проверяем успешность считывания данных с помощью оператора if. Если считывание не удалось, выводим сообщение об ошибке и завершаем программу.
  6. Определяем длину строки суффикса температуры с помощью функции strlen().
  7. Если длина строки суффикса температуры больше 1, выводим сообщение об ошибке и завершаем программу.
  8. Приводим первый символ суффикса температуры к верхнему регистру с помощью функции toupper().
  9. Проверяем, что первый символ суффикса температуры не является 'K', 'F' или 'C'. Если это так, выводим сообщение об ошибке и завершаем программу.
  10. Выводим значение температуры и ее суффикс.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

10   голосов , оценка 3.6 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы