Форум программистов, компьютерный форум CyberForum.ru

Защита от ввода некорректных данных в консольной программе - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Найти медиану ряда http://www.cyberforum.ru/cpp-beginners/thread751635.html
Уважаемые программисты! Помогите исправить код по нахождению медианы ряда (N - длина последовательности). Может, что-то неправильно с qsort - сортировкой? Заранее благодарен. #include <iostream> #include <cstdio> #include <cstdlib> using namespace std; int comp(const void *grade, const void *b)
C++ Необходимо выделить из текста слова в которых количество гласных букв парная Необходимо выделить из текста слова в которых количество гласных букв парная http://www.cyberforum.ru/cpp-beginners/thread751616.html
C++ Невозможно обратиться к private член, объявленному в классе "Complex"
выдавало ошибку "невозможно обратиться к private член, объявленному в классе "Complex"" я поменяла int n; private: double re; double im; }; на
C++ Ошибка "Перегруженная функция-член не найдена"
заголовочный файл clas_s.h #include <iostream> #include <conio.h> #include <math.h> using namespace std; class Complex // класс компелексных чисел { double re, im; // целая и мнимая части
C++ Нужно с одного файла считать числа(десятичные дроби), заменить их словами, и записать в другой! http://www.cyberforum.ru/cpp-beginners/thread751590.html
пожалуйста! помогите! нужно с одного файла считать числа(десятичные дроби), заменить их словами, и записать в другой!
C++ Создать базу данных автобусного парка Доброго времени суток. Задание таково: Создать базу данных автобусного парка. Структура информации: номер автобуса, фамилия водителя, номер маршрута, количество автобусов на маршруте. В программу необходимо включить меню работы с программой, которое должно содержать следующие пункты: а) создание файла исходных данных; б) просмотр содержимого файла; в) поиск заданной информации в... подробнее

Показать сообщение отдельно
SuperMario
 Аватар для SuperMario
0 / 0 / 0
Регистрация: 03.01.2013
Сообщений: 3
03.01.2013, 09:57     Защита от ввода некорректных данных в консольной программе
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
#include "stdafx.h"
#include <iostream>
#include <cstdlib> 
#include <conio.h>
#include <cmath>
 
using namespace std;
 
float slojenie (float f_n1, float f_n2, float f_n3) {
    return f_n1 + f_n2 + f_n3;
}
 
float ymnojenie (float f_n1, float f_n2, float f_n3) {
    return f_n1 * f_n2 * f_n3;
}
 
 
int _tmain(int argc, _TCHAR* argv[])
{
        char  num[2]
        float n1, n2, n3;
        
    while (1) {
            cout<<"              ::Меню программы:: "<<endl<<endl;
            cout<<"          '1'   - Сложение трех чисел."<<endl;
            cout<<"          '2'   - Умножение трех чисел чисел."<<endl;
            cout<<"          '3'   - Выйти из программы."<<endl<<endl;
            cin>>num;
            cout<<endl;
                             
          if (num[0] == '1') {
            cout << "Для сложения введите три числа: "<<endl;
            cin >> n1 >> n2 >> n3;
            cout<<endl;
            cout << "Результат сложения трёх чисел : "<<slojenie(n1, n2, n3)<<endl<<endl;
          }
          else if (num[0] == '2') {
            cout << "Для умножения введите три числа: "<<endl;
            cin >> n1 >> n2 >> n3;
            cout<<endl;
            cout << "Результат умножения трёх чисел : "<<ymnojenie(n1, n2, n3)<<endl<<endl;
          }
          else if (num[0] == '3') {
              return 0;
          }
          else if (num[0] > '3'  || num[0] < '1') { 
              cout<<"Вы ввели несуществующий пункт меню."<<endl; 
          }
          else {    
              cout<<"Вы ввели несуществующий пункт меню."<<endl;
          }
          
    }   
 
    return 0;
 
}
Написал эту примитивную менюшку, вроде бы все хорошо: программа обрабатывает следующие попытки ввода некорректных данных:
- если при выборе пункта меню мы вводим в консоль следующее: #$@$rewr$6(*%9 , то программа реагирует правильно и выдаёт сообщение "Вы ввели несуществующий пункт меню."
- если при выборе пункта меню мы вводим в консоль следующее: asdassdsdasd+пробелы с клавиатуры, то программа реагирует правильно и выдаёт сообщение "Вы ввели несуществующий пункт меню."

Проблема заключается в том, что если в консоль при выборе пункта меню ввести следующее:
- q323 334 - программа выдает окно ошибки: Run-Time Check Failure #2 - Stack around the variable 'num' was corrupted.
- q12 123 - программа выдаёт сообщение "Вы ввели несуществующий пункт меню." , но тем не менее после этого самопроизвольно вызывает 2-ой пункт меню "Для умножения введите три числа:"., далее если ввести вместо этих трех чисел например: qwe eqw eqwe - то программу зацикливает.
- er weuir r wer werwe r - при таком вводе при выборе пункта, прога дублирует менюшку ровно 6 раз (равное количеству пробелов между введенной кадаброй).

Помогите пожалуйста доделать мне эту прожку, чтобы она корректно отсеивала намеренно неправильно введенные данные как при выборе пункта меню, так и при вводе данных для сложения и умножения и выхода из программы. Просто уже многие варианты перепробовал - не получается. Заранее благодарен.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 10:32. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru