Проверка значений ввода - 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 цель реализована:
void temperature() {
    float numerial = 0;
    char FirstChoiceTemp = 'o';
    
    printf("Enter the temperature followed by its suffix (F, C, or K): ");
    scanf(" %f %c",&numerial,&FirstChoiceTemp);
    
    if( (FirstChoiceTemp == 'K') || (FirstChoiceTemp == 'k') ){
        Kelvin(numerial);               //вызываем функцию и передаем значение
    }
    else if( (FirstChoiceTemp == 'C') || (FirstChoiceTemp == 'c') ){
        Celsii(numerial);
    }
    else if( (FirstChoiceTemp == 'F') || (FirstChoiceTemp == 'f') ){
        Farenheit(numerial);
    }
    else {
        printf("Invalid formatting. Ending program.");
    }
    
}
В ней реализована только 2 цель, и если я введу 42 G, он не выведет мне ""G is not a valid temperature type. Ending program." Может стоит еще один else if добавить? Хоть я пытался что,то выкрутить с помощью этого, не вышло

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

textual
Листинг программы
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <ctype.h>
void temperature();
int main()
{
    temperature();
    return 0;
}
void temperature()
{
    int len = 0;
    double numerial;
    char FirstChoiceTemp[] = "";
    printf("Enter the temperature followed by its suffix (F, C, or K): ");
    if(!scanf("%lf %s",&numerial, FirstChoiceTemp)){
        fprintf(stderr, "Error enter!");
        exit(2);
    }
    len = strlen(FirstChoiceTemp);
    if(len > 1){
        puts("Invalid formatting. Ending program.");
        exit(1);
        }
    else{
        FirstChoiceTemp[0] = toupper(FirstChoiceTemp[0]);
        if(FirstChoiceTemp[0] != 'K' && FirstChoiceTemp[0] != 'F' && FirstChoiceTemp[0] != 'C'){
        printf("'%c' is not a valid temperature type. Ending program.", FirstChoiceTemp[0]);
        exit(1);
        }
    }
    printf("%g  %s\n", numerial, FirstChoiceTemp);
}

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

  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
Похожие ответы