Форум программистов, компьютерный форум, киберфорум
Наши страницы
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
1

Проверка значений ввода

08.10.2016, 07:12. Просмотров 916. Ответов 5
Метки нет (Все метки)

Всем привет! Снова вопрос, как можно реализовать следующую вещь:
Допустим я ввожу какой либо символ из 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 цель реализована:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
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 добавить? Хоть я пытался что,то выкрутить с помощью этого, не вышло
0
Миниатюры
Проверка значений ввода   Проверка значений ввода  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.10.2016, 07:12
Ответы с готовыми решениями:

Проверка ввода. на С
Ребят помогите пожалуйста организовать проверку ввода. Ситуация следующая. Мне нужно организовать...

Проверка ввода
Здравствуйте! как произвести проверку на ввод данных чтоб только числа можно было ввести, т.е если...

Проверка правильности ввода
Нужно ввести с клавиатуры название страны и ее населения, как сделать проверку правильности ввода,...

Проверка на корректность ввода
Люди добрые, помогите мне, неумехе несчастному... короче, есть прога на си: #include<stdio.h>...

Проверка корректности ввода
всем приятного времени суток)):)тут такой вопросик! имеется прога, которая переводит из любой...

5
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
08.10.2016, 07:36 2
сделайте проще-через два scanf-а,один под буквы другой под цифры,с проверками
1
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
08.10.2016, 08:35  [ТС] 3
Увы, от профессора получил такое задание, т.е. я не могу сначала ввести одно число, а потом после "нажатия" ентер ввести символ в вторую функцию scanf... Я должен одной функцией scanf

Вот так мы сдаем домашнее задание и наши работы проверяет "программа". Т.е. если я использую вторую функцию scanf машина пошлет мое ДЗ
0
Миниатюры
Проверка значений ввода  
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
08.10.2016, 10:13 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void temperature()
{
    double numerial;
    char FirstChoiceTemp;
 
    printf("Enter the temperature followed by its suffix (F, C, or K): ");
    scanf("%lf %c",&numerial, &FirstChoiceTemp);
    FirstChoiceTemp = toupper(FirstChoiceTemp);
    if(FirstChoiceTemp != 'K' && FirstChoiceTemp != 'F' && FirstChoiceTemp != 'C'){
        puts("Invalid formatting. Ending program.");
        exit(1);
    }
    printf("%g  %c\n", numerial, FirstChoiceTemp);
}
Добавлено через 7 минут
если в scanf стоит спецификатор %с то она рассматривает только единственный первый символ,остальные отбрасываются

Добавлено через 21 минуту
madi, вот кажется как вы хотели
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void temperature()
{
    int len = 0;
    double numerial;
    char FirstChoiceTemp[] = "";
    printf("Enter the temperature followed by its suffix (F, C, or K): ");
    scanf("%lf %s",&numerial, FirstChoiceTemp);
    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 минуту
неплохо бы еще проверку добавить ввелось ли число в numerial...
1
madi
0 / 0 / 0
Регистрация: 28.04.2014
Сообщений: 86
09.10.2016, 09:53  [ТС] 5
Отличный выстрел) Но в девятку, т.к. выводит следующее
Странно, потому что в этой строке
C
1
printf("'%c' is not a valid temperature type. Ending program.", FirstChoiceTemp[0]);
мы вроде как просим первый символ вывести...а он выводит то, что мы присвоили ими при инициализации...
0
Миниатюры
Проверка значений ввода   Проверка значений ввода  
LFC
730 / 535 / 416
Регистрация: 17.09.2015
Сообщений: 1,598
09.10.2016, 14:07 6
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

Цитата Сообщение от LFC Посмотреть сообщение
неплохо бы еще проверку добавить ввелось ли число в numerial...
зря я канеш поленился сразу foolproof не сделал....
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
#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);
}
Добавлено через 4 минуты
Цитата Сообщение от madi Посмотреть сообщение
мы вроде как просим первый символ вывести...а он выводит то, что мы присвоили ими при инициализации...
можно еще понять когда юзер че попало вводит-чайник,что с него взять...но программер...в своей же собственной программе...повнимательнее смотрите что вводите.
1
09.10.2016, 14:07
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2016, 14:07

Проверка ввода зацикливается
Здравствуйте. Есть одна функция ввода: void input( double *d, double *x, double *y ) { for(;;) {...

Проверка правильности ввода
Здравствуйте, у меня есть 2 программы, они полностью рабочие. Но я должна сделать проверку на ввод...

Проверка правильного ввода
Вот в строчке 17, не могу понять как организовать несколько проверочных аргументов #include...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru