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

Распознавание содержимого переменной (символы или цифры) - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Даблклик http://www.cyberforum.ru/cpp-beginners/thread617879.html
не могу разобраться с функцией. понял, что вмнотифай уведомляет своим сообщением родительское окно, а что означает следущая строчка, так и не понял. с даблкликом тоже не очень, понял что там...
C++ Найти количество элементов массива, равных максимальному Дан целочисленный массив из 30 элементов. Найти количество элементов, равных максимальному. http://www.cyberforum.ru/cpp-beginners/thread617852.html
C++ Дан массив из n x m Элементов. Найти наибольшимй элемент массива в каждой строке
Дан массив из n x m Элементов. Найти наибольшимй элемент массива в каждой строке Давайте темам осмысленные названия, которые будут отображать суть задания.
C++ Найти наибольший элемент двумерного массива в каждой его строке
Дан масив из n x m элементов.Найти наибольший элемент массива в каждой строке #include <iostream> #include <time.h> #include <stdlib.h> #include <conio.h> #include <iomanip> using...
C++ При выполнение exe файла быстро схлопывается окно терминала http://www.cyberforum.ru/cpp-beginners/thread617813.html
Парни need help! Написал простенькую программку, скомпилировал ее, запускаю и все бы ничего но окно терминала и секунды не висит и само зарывается. Едва заметно, что программа выполняет то, что и...
C++ Как можно изменить данные на браузере? Как можно изменить данные на браузере,например количество сообщений и т.п. Может есть спец. проги . Помогите новичку!:) или дайте направления хотя-бы спасибо заранее подробнее

Показать сообщение отдельно
alsav22
5425 / 4820 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2012, 07:49
Вообще-то, cin >> устанавливает флаг ошибки, если введённое не соответствует типу переменной куда читается. Это можно использовать. Например, так:
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
//Программа для определения значения больше или меньше нуля
#include<iostream>
using namespace std;
#include<locale.h>
#include<conio.h>
 
int main ()
{
    //Pуссифицируем консоль
    setlocale (LC_ALL, "russian");
 
    //Обьявляем переменные
    int nData;
    char ch;
    //Получаем значение переменной
do
{   
cout <<"\nВведите любое число: ";
if (cin >> nData) // проверка на ошибку при вводе.
{
    cout << nData << endl;
    //Сравниваем значение переменной с нулем
    if(nData == 0)
    cout <<"\nЗначение равно нулю\n";
    if(nData > 0)
    cout <<"\nЗначение больше нуля\n";
    if (nData < 0)
    cout <<"\nЗначение меньше нуля\n";
    cin.clear(); // если после числа шло не число, сброс флага ошибки.
    while (cin.get() != '\n'); // очистка очереди ввода.
}
else // если ошибка при вводе (если первое не число).
{
    cin.clear(); // сброс флага ошибки.
    while (cin.get() != '\n'); // очистка очереди ввода.
    cout << "Ошибка!" << endl;
}
cout << "\nПродолжить? ( y/n)  ";
cin >> ch;
} while (ch != 'n');
 
cout << endl;
system("pause");
return 0;
}
Если не число в начале, будет сразу ошибка. Если сначала число, а в конце не число, то считает в nData только число, но установит флаг ошибки. Для более строго решения, рекомендую код функции, которая вообще не даёт вводить не цифры, а введённые цифры переводит в число:Как поставить ограничение на ввод только числа В ней можно вводить только цифры, минус, делать стирание.

Добавлено через 4 часа 53 минуты
Например, её можно так использовать:
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
90
91
92
93
94
95
#include "conio.h" // для getch().
#include <iostream>
#include <sstream> // для stringstream.
using namespace std;
 
int GetInt()
{
   int n = 0, flgS = 0, c = 0, q = 0; 
   unsigned char k; // переменная для ввода.
   string str;           // строка для цифр.
 
    while (1)
   {
        k = getch(); // ввод без отображения.
        
        if ((k == '-') && (c == 0) && (flgS == 0)) // если минус, и число символов 0, и флаг 0.
       {
          flgS=-1; // если минус отображается.
          cout << '-';      // отображаем минус.
          str.push_back(k); // минус в строку.
          c++;              // число символов.
       }
        
        if ((k >= '0') && (k <= '9')) // если символ цифра.
       {
           cout << k;        // отображаем цифру.
           str.push_back(k); // символ в строку.
           c++;              // число символов.
           q++;              // число цифр.
       }
     
       if (k == '\b' && c != 0) // если backspace, но число символов не 0.
       {
           cout << '\b'; // курсор на шаг назад.
           cout << ' ';  // затираем последий символ.
           cout << '\b'; // курсор на шаг назад.
           if (!str.empty()) // если строка не пуста, 
              str.pop_back(); // то извлекаем один.
           q--;            // число цифр уменьшили.
           if (q < 0) q = 0;  
           c--;            // число символов уменьшили.
           if (c <= 0)     // если удалённый символ был последним,
           {
                flgS = 0; // обнуляем флаг, чтобы можно было снова отображать минус.
                c = 0;    // количество символов 0.
           } 
       }
 
       if ((k == 13) && (c != 0) && (q != 0)) break; // если хотя бы одна цифра введена, то выход. 
 
    }
    stringstream stream(stringstream::in | stringstream::out); // создаётся объект для внутреннего форматирования.
    stream << str; // вводим строку числовых символов.
    stream >> n;   // извлекаем число.
    
    return n;
}
 
int main()
{
 
    //Pуссифицируем консоль
    setlocale (LC_ALL, "russian");
 
    //Обьявляем переменные
    int nData;
    char ch;
    //Получаем значение переменной
do
{   
cout <<"\nВведите любое число: ";
 
nData = GetInt(); // вызов функции для ввода.
 
cout << "\nВы ввели число " << nData << endl;
 
//Сравниваем значение переменной с нулем
    if(nData == 0)
    cout <<"\nЗначение равно нулю\n";
    if(nData > 0)
    cout <<"\nЗначение больше нуля\n";
    if (nData < 0)
    cout <<"\nЗначение меньше нуля\n";
    
cout << "\nПродолжить? ( y/n)  ";
cin >> ch;
cin.clear();   // если ошибка cin >> , то сбрасываем флаг ошибки.           
while (cin.get() != '\n'); // очистка очереди ввода.
 
} while (ch != 'n'); // если n, то выход.
 
cout << endl;
system("pause");
return 0;
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru