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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 327
#1

Доработать: защитить от дурака (запретить введения опр. символов) - C++

09.10.2012, 19:35. Просмотров 664. Ответов 7
Метки нет (Все метки)

Доброго времени суток форумчане, я впал в моральный приступ эпилепсии, посему создал новую тему, т.к. предыдущая зашла в тупик. Итак, вот программа, с её доскональным описанием:
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
/*Программа, которая в массиве (заполненным рандомно на интервале от 0 до 155) 
с заданным кол-вом элементов, находит числа у которых при делении на 7 в остатке 
остаётся 1, 2 или 5 */
 
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
 
int f_ostatok(int a)
{   
    if (a%7==1 || a%7==2 || a%7==5)
        return 1;
    else
        return 0;
}
 
int main ()
{
    int number;
    int summ = 0;
    cout << "Vvedite kol-vo ycheek massiva : ";
    cin >> number;
    cout << "\n";
    //создали динамический массив
    int *mass = new int[number];
    //заполняем массив рандомными значениями
    srand(time(NULL));
    for (int i = 0; i < number; i++) 
    {
        mass[i]=(rand()%155);       
        cout << "Znachenie elementa " << i <<" = "<< mass[i] << endl;
    }
    //находим числа, что делятся на 7 и дают в остатке 1, 2 или 5
    for (int i = 0; i < number; i++)
    {
        summ = summ + f_ostatok(mass[i]);   
    }
    cout << "\nKol-vo elementov pri delenii kotoryh na 7 ostatok = 1 // 2 // 5: " << summ;
    if (summ = 0)
    {
        cout << "\nTrebuemix elementov v massive net";
    }
    delete[] mass;
    getch();
    return 0;
}
Итак, нужно защитить переменную number таким образом, что она может быть только числом.
Как переработать код?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.10.2012, 19:35     Доработать: защитить от дурака (запретить введения опр. символов)
Посмотрите здесь:
C++ Запретить ввод символов
C++ Запретить ввод символов
C++ Доработать код: изменение регистра символов, считанных из файла
C++ Как в программе запретить ввод символов и букв!
C++ Как запретить ввод в строку всех символов, кроме 0, 1 и пробела?
Опр длинну строк без исп strlen C++
C++ Оператор печатает случайное число из опр.чисел
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
09.10.2012, 19:43     Доработать: защитить от дурака (запретить введения опр. символов) #2
C++
1
2
3
    while(cin >> number, number <= 0) {
        cout << "Error, only numbers > 0\n";
    }
как-то так
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 327
09.10.2012, 19:46  [ТС]     Доработать: защитить от дурака (запретить введения опр. символов) #3
Цитата Сообщение от ZoRT Посмотреть сообщение
C++
1
2
3
    while(cin >> number, number <= 0) {
        cout << "Error, only numbers > 0\n";
    }
как-то так
нет, так бесконечно выводит Error, only numbers > 0
avizer
5 / 5 / 1
Регистрация: 07.04.2012
Сообщений: 38
09.10.2012, 19:53     Доработать: защитить от дурака (запретить введения опр. символов) #4
C++
1
2
3
4
5
   int x;
   if (cin>>x)
   cout<<"chislo";
   else
   cout<<"ne chislo";
Venzo
125 / 123 / 4
Регистрация: 03.07.2011
Сообщений: 354
09.10.2012, 19:58     Доработать: защитить от дурака (запретить введения опр. символов) #5
Цитата Сообщение от Gudsaf Посмотреть сообщение
нет, так бесконечно выводит Error, only numbers > 0
странно, http://liveworkspace.org/code/75ecf1...58a225edf364de у меня и тут работает как и задумывалось
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 327
09.10.2012, 20:15  [ТС]     Доработать: защитить от дурака (запретить введения опр. символов) #6
Цитата Сообщение от ZoRT Посмотреть сообщение
странно, http://liveworkspace.org/code/75ecf1...58a225edf364de у меня и тут работает как и задумывалось
VS 2012 - бесконечный цикл.
Цитата Сообщение от avizer Посмотреть сообщение
C++
1
2
3
4
5
   int x;
   if (cin>>x)
   cout<<"chislo";
   else
   cout<<"ne chislo";
Работает не верно, при вводе "65рпдцук" - думает что всего 65 ячеек, то есть строку "65рпдцук" считает числом - а это не так...
avizer
5 / 5 / 1
Регистрация: 07.04.2012
Сообщений: 38
09.10.2012, 20:25     Доработать: защитить от дурака (запретить введения опр. символов) #7
ok
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
   int x;
   while(true){
        cout << "chislo: ";
        cin >> x;
        if (cin.peek() == '\n'){
            cin.get();
            break;
        }
        else{
            cout <<"povtor:"<<endl;
            cin.clear();
            while (cin.get() != '\n'){}
        }
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.10.2012, 21:06     Доработать: защитить от дурака (запретить введения опр. символов)
Еще ссылки по теме:
Опр. произведение эл-тов, лежащих после мин. значения C++
Защита от введения отрицательных чисел C++
C++ Проверка на правильность введения строки на кириллице
Защита от дурака C++
C++ Защита от дурака

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

Или воспользуйтесь поиском по форуму:
Gudsaf
103 / 14 / 3
Регистрация: 29.11.2010
Сообщений: 327
09.10.2012, 21:06  [ТС]     Доработать: защитить от дурака (запретить введения опр. символов) #8
Ещё хотел бы добавить доработку пользователя нашего форума - unkarjedy, она мне тоже понравилась, да и человек до цели в итоге дошёл - за что ему ++.... в плюс бесконечности

Цитата Сообщение от unkarjedy Посмотреть сообщение
Нормально работает

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
/*Программа, которая в массиве (заполненным рандомно на интервале от 0 до 155) 
с заданным кол-вом элементов, находит числа у которых при делении на 7 в остатке 
остаётся 1, 2 или 5 */
 
#include <iostream>
#include <string>
#include <cstdlib>
#include <ctime>
#include <conio.h>
using namespace std;
 
int f_ostatok(int a)
{   
    if (a%7==1 || a%7==2 || a%7==5)
        return 1;
    else
        return 0;
}
 
int main ()
{
    int number;
    string number_str;
    int summ = 0;
    cout << "Vvedite kol-vo ycheek massiva : ";
    cin >> number_str;
    
    
    for(int i = 0; i < number_str.length(); i++) {
        char ch = number_str.c_str()[i];// считываем очередной символ из принятой строки
        if(!isdigit(ch)) { // если он не цифра
            cerr << " ERROR: you entered a letter!" << endl << endl; // печатаем ошибку
            return 1; // выходим из программы. не важно 1 или 0 для вас
        }
    }
    number = atoi(number_str.c_str()); // конвертируем строку в число
 
 
    //создали динамический массив
    int *mass = new int[number];
    //заполняем массив рандомными значениями
    srand(time(NULL));
    for (int i = 0; i < number; i++) 
    {
        mass[i]=(rand()%155);       
        cout << "Znachenie elementa " << i <<" = "<< mass[i] << endl;
    }
    //находим числа, что делятся на 7 и дают в остатке 1, 2 или 5
    for (int i = 0; i < number; i++)
    {
        summ = summ + f_ostatok(mass[i]);   
    }
    cout << "\nKol-vo elementov pri delenii kotoryh na 7 ostatok = 1 // 2 // 5: " << summ;
    if (summ = 0)
    {
        cout << "\nTrebuemix elementov v massive net";
    }
    delete[] mass;
    getch();
    return 0;
}
Добавлено через 1 минуту
Защитил переменную number
Yandex
Объявления
09.10.2012, 21:06     Доработать: защитить от дурака (запретить введения опр. символов)
Ответ Создать тему
Опции темы

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