Проверка значений ввода - 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 цель реализована:
В ней реализована только 2 цель, и если я введу 42 G, он не выведет мне ""G is not a valid temperature type. Ending program."
Может стоит еще один else if добавить? Хоть я пытался что,то выкрутить с помощью этого, не вышло
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.");
}
}Решение задачи: «Проверка значений ввода»
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);
}
Объяснение кода листинга программы
- Включаем необходимые заголовочные файлы для работы с вводом/выводом, строками и числами.
- Объявляем функцию
temperature(), которая будет выполнять проверку ввода температуры. - В функции
main()вызываемtemperature(). - В функции
temperature()с помощьюscanf()считываем введенное значение температуры и его суффикс. - Проверяем успешность считывания данных с помощью оператора
if. Если считывание не удалось, выводим сообщение об ошибке и завершаем программу. - Определяем длину строки суффикса температуры с помощью функции
strlen(). - Если длина строки суффикса температуры больше 1, выводим сообщение об ошибке и завершаем программу.
- Приводим первый символ суффикса температуры к верхнему регистру с помощью функции
toupper(). - Проверяем, что первый символ суффикса температуры не является 'K', 'F' или 'C'. Если это так, выводим сообщение об ошибке и завершаем программу.
- Выводим значение температуры и ее суффикс.