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

Проверка числовой ли ввод - C++

Восстановить пароль Регистрация
 
Snickers077
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
31.03.2014, 16:55     Проверка числовой ли ввод #1
Здравствуйте! Задача такая. Написать программу, читающую в массив double до 10 значений пожертвований. ПРограмма должна прекращать ввод при получении нечисловой величины. Она должна выдавать среднее значение полученных чисел. А так же количество значений в массиве превышающих среднее.

Написал программу, вот что получилось:
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
#include "stdafx.h"
#include <cctype>
#include <iostream>
const int Razm = 10;
int _tmain(int argc, _TCHAR* argv[])
{
    using namespace std;
    double mpog [Razm];
    int i = 0, j, kb = 0;
    double sum = 0, sred;
    cout << "vvedite 10 znachenii pogertvovanii: ";
    while (i < Razm)
    {
        cin >> mpog[i];
        if (!(isdigit(mpog[i])))// проверка что ввод цифровой
        {
            sum += mpog[i];
                    
        }
        [COLOR="Red"]else {
            cout << "vi vveli ne chislo!"; //прерывание программы в случае нецифрового ввода
            break;
        }[/COLOR]
    
    i = i++;
    
    
    
    }
sred = sum/i;
for (j=0; j < i; j++)
    if (mpog[j] > sred)
        kb = kb++;
 
cout << "Srednee poluchennix chisel ravno: " << sred << endl;
cout << "Kolichestvo chisel vishe srednego ravno: " << kb;
 
 
 
cin.get();
cin.get();
    return 0;
}
Проблема в том, что при введении нечисловой величины (например буквы) компилятор сам прерывает программу и код выделенный красным не выполняется. Как сделать так, чтобы компилятор не прерывал программу, а выполнялась моя проверка на предмет цифрового ввода или это невозможно?
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
31.03.2014, 16:55     Проверка числовой ли ввод
Посмотрите здесь:

C++ Проверка на ввод C++
Проверка на ввод C++
C++ Построчный числовой ввод данных в массив
Проверка числовой строки C++
Числовой ввод C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 16:58     Проверка числовой ли ввод #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Переделайте под свои нужды:
C++
1
2
3
4
5
6
7
8
// в строке ввода только цифры, перед которыми могут быть + или -.
int a;
while (!(cin >> a) || (cin.peek() != '\n'))
{
    cin.clear();
    while (cin.get() != '\n');
    cout << "Error!" << endl;
}
Snickers077
0 / 0 / 0
Регистрация: 12.01.2014
Сообщений: 12
31.03.2014, 17:09  [ТС]     Проверка числовой ли ввод #3
А для особо одаренных можно объяснить как это работает на пальцах. И что за функция cin.peek()?
Craw
 Аватар для Craw
233 / 44 / 4
Регистрация: 10.06.2012
Сообщений: 268
Записей в блоге: 1
31.03.2014, 17:44     Проверка числовой ли ввод #4
Попробуйте:
C++
1
2
3
4
5
6
7
8
9
10
for (int i=0; i<Razm; i++) {
     cin >> mpog[i];
     if (isdigit(mpog[i])) {
          sum+=mpog[i];
     }
     else {
          cout << "Not a number!";
          break;
     }
}
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
31.03.2014, 17:58     Проверка числовой ли ввод #5
Цитата Сообщение от Snickers077 Посмотреть сообщение
И что за функция cin.peek()
http://www.cplusplus.com/reference/i.../istream/peek/

Добавлено через 2 минуты
Цитата Сообщение от Snickers077 Посмотреть сообщение
А для особо одаренных можно объяснить как это работает на пальцах.
Нужен фильтр ввода данных
Yandex
Объявления
31.03.2014, 17:58     Проверка числовой ли ввод
Ответ Создать тему
Опции темы

Текущее время: 11:13. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru