0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 22
1

Защита от некорректного ввода

04.06.2015, 19:57. Показов 2336. Ответов 9
Метки нет (Все метки)

Помогите, пожалуйста, с защитой от некорректного ввода! Программа выполняет задания с помощью рекурсии. Хотел написать защиту на ввод данных и меню попроще, так как по сути её не освоил совсем, но преподаватель быстро сломал её..

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
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <cstdlib>
 
using namespace std;
 
void About()
{
    printf("\nРекурсия.ИНБ-11.Пенкин Алексей.");
    printf("Вариант 15");
    printf("   Пусть:                                            \n");
    printf("y[0]=1                                              \n");
    printf("      y[k-1]+1                             \n");
    printf("y[k]=----------                            \n");
    printf("      y[k-1]+2                             \n");
    printf("k=1,2,...                                       \n");
    printf("Дано действительное E(E>0). \n");
    printf("Найти первый член y[n], для которого выполнено y[n] - y[n - 1] < E.\n");
};
float rec(float *y, int i, float E, int& n)
{
    y[0] =1;
    y[i] = (y[i-1] + 1) / (y[i-1] + 2);
    n = i;
    if ((y[i] - y[i - 1]) < E)
    {   
         printf("Первый удовлетворяющий условию (y[i] - y[i - 1] < E) элемент = %f\n", y[i]);
         printf("Номер элемента: %d\n", n);
         printf("Результат выражения y[%d]-y[%d] = %f\n", n, n - 1, y[i] - y[i - 1]);
    }
    else
    {
        i++;
        y[i] = rec(y, i, E, n);
    }
        return y[i];
}
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
    float y[1000], E=0;
    char p[256];
    char l[256];
    int n = 0, i = 1, menu,flag;
    do{
        system("cls");
        printf("Меню:\n");
        printf("1.Ввод действительного Е\n");
        printf("2.Решение\n");
        printf("3.О программе\n");
        printf("4.Выход\n");
        printf("Номер команды --> ");
        cin >> p;
        menu = atoi(p);
        switch (menu)
        {
        case 1:printf("\nВведите E(E>0):");
            cin >> l;
            E = atoi(l);
            if (E<=0)
            {
                printf("Введено недопустимое значение, E присвоено значение 1");
                E=1;
            }
            flag = 1;
            break;
        case 2: if (flag != 1)
        {
                    printf("Вы не ввели переменную.\n");
        }
                else{
                    rec(y, i, E, n);
                    }
                break;
        case 3: 
            About();
            break;
        case 4: printf("\nВыход.");
            break;
        
        default: printf("Команда не определена\n");
            break;
        }
        printf("\n//Нажмите любую клавишу.");
        _getch();
 
    } while (menu != 4);
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ, диссертаций здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.06.2015, 19:57
Ответы с готовыми решениями:

Защита от некорректного ввода
Подскажите пожалуйста как доработать защиту от некорректного ввода: // ConsoleApplication4.cpp :...

Защита от некорректного ввода
Помогите сделать так, что при вводе букв программа продолжала работать: запрещала ввод букв(только...

Защита от некорректного ввода
Приветствую, помогите, пожалуйста, реализовать защиту от некорректного ввода. Должны быть...

Защита от некорректного ввода
Здравствуйте! Нужно осуществить контроль при заполнении матрицы, если введены не корректные...

9
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
04.06.2015, 20:02 2
От некорректного ввода в каком именно месте?
0
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 22
04.06.2015, 20:43  [ТС] 3
На ввод действительного E и пункты меню..
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,714
04.06.2015, 20:52 4
Цитата Сообщение от Alexei96 Посмотреть сообщение
float y[1000], E=0;
Цитата Сообщение от Alexei96 Посмотреть сообщение
E = atoi(l);
это как????
0
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 22
04.06.2015, 20:58  [ТС] 5
Да я здесь пытался, чтобы буквы не вводило при вводе E, знаю, что неправильно(
0
Модератор
Эксперт по электронике
8695 / 6493 / 879
Регистрация: 14.02.2011
Сообщений: 22,714
04.06.2015, 21:14 6
Alexei96,
ты хоть описания функции atoi читал? хотя бы здесь
http://cppstudio.com/post/803/
она строку в целочисленное переводит
для действительных нужна atof
http://cppstudio.com/post/792/
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
04.06.2015, 21:15 7
Лучший ответ Сообщение было отмечено Alexei96 как решение

Решение

menu и l убрать, они лишние. Тип p изменить.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
char p;
 
cin >> p;
if (cin.peek() != '\n')
{
    // ошибка
    while (cin.peek() != '\n') cin.get();
}
 
switch (p)
{
    case '1':
 
    case '2':
C++
1
2
3
4
5
6
cin >> E;
if (!cin || E <= 0)
{
    // ошибка
    while (cin.peek() != '\n') cin.get();
}
1
0 / 0 / 0
Регистрация: 11.05.2015
Сообщений: 22
04.06.2015, 22:01  [ТС] 8
Спасибо большое, постараюсь разобраться!) Эта защита нереально короткая, я таких ещё не видел))
0
lss
939 / 867 / 355
Регистрация: 10.10.2012
Сообщений: 2,706
04.06.2015, 23:12 9
Цитата Сообщение от nmcf Посмотреть сообщение
cin >> E;
if (!cin || E <= 0)
{
* * // ошибка
* * while (cin.peek() != '\n') cin.get();
}
А cin.clear() где?
0
7166 / 6141 / 2802
Регистрация: 14.04.2014
Сообщений: 26,462
05.06.2015, 08:05 10
Ну допилить надо, чтобы clear() был.
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
05.06.2015, 08:05
Помогаю со студенческими работами здесь

Защита от некорректного ввода
Будьте добры, помогите написать защиту от дурака на ввод массива элементы которого тип float...

Защита от некорректного ввода
Здравствуйте. 1 курс, полный нуб. Знаю только cin и cout, массивы. Пока все было нормально, но...

Защита от некорректного ввода double
Прошу помощи с защитой от некорректного ввода. Сам студент 1 курса - на лекциях ничего толком не...

Защита от некорректного ввода не работает верно
Некорректно работает защита от некорректного ввода, а именно, после ошибочного ввода и вывода...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru