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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.79
HumanityShitnes
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 6
#1

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

02.07.2012, 16:25. Просмотров 2551. Ответов 36
Метки нет (Все метки)

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
//Программа для определения значения больше или меньше нуля
#include<iostream>
using namespace std;
#include<locale.h>
#include<conio.h>
 
int main ()
{
    //Pуссифицируем консоль
    setlocale (LC_ALL, "russian");
 
    //Обьявляем переменные
    int nData;
 
    //Получаем значение переменной
    cout <<"Введите любое число: ";
    cin >> nData;
    cout << nData;
 
    //Сравниваем значение переменной с нулем
 if(nData == 0)
 cout <<"\nЗначение равно нулю";
 if(nData > 0)
 cout <<"\nЗначение больше нуля";
 if (nData < 0)
 cout <<"\nЗначение меньше нуля";
_getch();
return 0;
Есть такой вот код, при вводе символьного значения выдает решение по условиям, нужно научить прогу распознавать символы и цифры где нибудь перед сравнением с нулем)
если код кривоват, подскажите где, изучаю сам, только по справочным пособиям без всяких уроков)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
02.07.2012, 16:25     Распознавание содержимого переменной (символы или цифры)
Посмотрите здесь:
Заменить символами # символы, стоящие в строках или столбцах, где имеются цифры C++
C++ Создать очередь, содержащую любые символы. Удалить из очереди все символы, не являющиеся буквами или цифрами
Вывести символы, изображающие цифры числа C++
C++ Программа, преобразующая символы(цифры) в число
Как считать из файла символы и цифры одновременно? Структуры C++
C++ Вывести сначала все цифры, а потом - остальные символы
Как из переменной копировать цифры посимвольно в массив C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
02.07.2012, 16:30     Распознавание содержимого переменной (символы или цифры) #2
http://www.cplusplus.com/reference/clibrary/cctype/
HumanityShitnes
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 6
02.07.2012, 17:15  [ТС]     Распознавание содержимого переменной (символы или цифры) #3
возник следующий вопрос, какой тип переменной использовать в начале программы, тип char не подходит, т.к. если ввести слово или например 120021, то распознает только первый символ, т.е нужна инструкция для распознания наличия букв в веденном предложении, если все буквы, то вывод "вы ввели только буквы" например, если буквы с символами, то "нехер клацать по клаве как рак", если целое число или число с плавающей точкой, в т.ч. отридцательные, то сравнение с нулем и вывод соответствующего результата)
соответственно с последующей трансформацией в int и решением задачи)
заранее спасибо)
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
02.07.2012, 17:23     Распознавание содержимого переменной (символы или цифры) #4
std::string
HumanityShitnes
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 6
02.07.2012, 17:33  [ТС]     Распознавание содержимого переменной (символы или цифры) #5
а можно в виде кода? на наглядном примере мне будет проще разобраться
момент с обьявления переменной и получения ее значения до момента перевода переменной в int
а то читаю читаю, код в голове даже примерно выстроить не могу)
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
02.07.2012, 17:49     Распознавание содержимого переменной (символы или цифры) #6
набросал, первая распознает целые числа, вторая определяет, есть ли в строке что-то кроме букв
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
bool isInt(std::string &str) {
    int i = 0;
    if (str[i] == '-')
        if (str.size() > 1)
            ++i;
        else
            return false;
    while (i < str.size()) {
        if (!std::isdigit(str[i]))
            return false;
        ++i;
    }
    return true;
}
 
bool onlyLettes(std::string &str) {
    for (int i = 0; i < str.size(); ++i)
        if (!std::isalpa(str[i]))
            return false;
    return true;
}
HumanityShitnes
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 6
02.07.2012, 17:58  [ТС]     Распознавание содержимого переменной (символы или цифры) #7
я еще с массивами не знаком и как-то не очень разбираюсь как это можно воткнуть в мой код, но все равно спасибо, дойду до массивов, разберусь)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
03.07.2012, 07:49     Распознавание содержимого переменной (символы или цифры) #8
Вообще-то, 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;
}
ForEveR
В астрале
Эксперт С++
7969 / 4731 / 320
Регистрация: 24.06.2010
Сообщений: 10,539
Завершенные тесты: 3
03.07.2012, 09:48     Распознавание содержимого переменной (символы или цифры) #9
neske, эээ, передача по ссылке? оО
Jupiter
Каратель
Эксперт С++
6552 / 3972 / 226
Регистрация: 26.03.2010
Сообщений: 9,273
Записей в блоге: 1
Завершенные тесты: 2
03.07.2012, 10:36     Распознавание содержимого переменной (символы или цифры) #10
Цитата Сообщение от neske Посмотреть сообщение
isInt(std::string &str)
C++
1
isInt(const std::string &str)
Цитата Сообщение от neske Посмотреть сообщение
for (int i = 0; i < str.size();
C++
1
for (std::string::size_type i = 0; i < str.size();
soon
2538 / 1303 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
03.07.2012, 10:51     Распознавание содержимого переменной (символы или цифры) #11
Цитата Сообщение от neske Посмотреть сообщение
набросал, первая распознает целые числа, вторая определяет, есть ли в строке что-то кроме букв
Как вариант
C++
1
boost::regex_match(str, boost::regex("^[-+]?\\d+"))
C++
1
std::all_of(str.begin(), str.end(), isalpha)
HumanityShitnes
0 / 0 / 0
Регистрация: 02.07.2012
Сообщений: 6
03.07.2012, 22:16  [ТС]     Распознавание содержимого переменной (символы или цифры) #12
alsav22, а если вводим отридцательное число, как будет распознавать знак "-"????
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2012, 00:12     Распознавание содержимого переменной (символы или цифры) #13
Цитата Сообщение от HumanityShitnes Посмотреть сообщение
alsav22, а если вводим отридцательное число, как будет распознавать знак "-"????
Укажите о каком коде вопрос.

Добавлено через 30 минут
В этом:
код 1
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;
}
cin распознаёт один минус или один плюс перед числом.
В этом:
код 2
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#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(); // ввод без отображения.
        
        [CPP]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;
}[/CPP]

в функции GetInt() вот эот код:
C++
1
2
3
4
5
6
7
if ((k == '-') && (c == 0) && (flgS == 0)) // если минус, и число символов 0, и флаг 0.
       {
          flgS=-1; // если отображается минус .
          cout << '-';      // отображаем минус.
          str.push_back(k); // минус в строку.
          c++;              // число символов.
       }
и объект stream класса stringstream, тоже корректно обрабатывет один минус или один плюс перед числом:
C++
1
2
3
stringstream stream(stringstream::in | stringstream::out); // создаётся объект для внутреннего форматирования.
    stream << str; // вводим строку числовых символов.
    stream >> n;   // извлекаем число.
Коды рабочие, проверял.
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
04.07.2012, 02:40     Распознавание содержимого переменной (символы или цифры) #14
Вот написал вроде.Подробно всё!. У меня всё работает!!!Надеюсь, что помог.
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
// zadacha.cpp: главный файл проекта.
 
/*
Прграмма написана на Microsoft Visual Studio 2010, проект CLR.
Программа распознает минус и может принимать символы с точкой.
Также распознаются как символы русские буквы.
Я писал переменные буквами( мне так удобнее ).Расшифровка для лучшего поняти я ниже:
a - счетчик для цикла
b - мульти-переменная  -  сначала используется для хранения кодов цифр, после - дл хранения полученного числа
c - счетчик для введенных цифр
d - счетчик для введенных символ, специальных символов и всего прочего
z - счетчик для проверки на 0
*/
 
 
 
 
 
 
#include "stdafx.h" // гланый добавляемый файл
#include <stdio.h>  // for printf()
#include <conio.h>  // for getch()
#include <string.h> // for strlen(), char()
#include <stdlib.h> // for atof()
 
#define maxline 1000 //константа на размер массива
 
using namespace System;// системная куча памяти для программы (вроде так)
 
void getline(char s[]) // функция для получения строки с клавиатуры
{
    int c,i; // обьявляем переменные
    for (i=0; (c=getchar()) != '\n';i++) // ставим цикл
        s[i]=c; // загоняем в ячейку массива символ
    s[i]='\0'; // присваиваем массиву признак конца строки, чтобы массив стал строкой
}
 
int main() // главная функция
{
    int a,b=0,c=0,d=0,z=0; // обьявляем и инициализируем переменные
    system("chcp 1251"); // пишем, чтобы выводило и ВВОДИЛО также русские буквы
    char str[maxline]; // обьявляем массив
    getline(str); // используем функцию
    for (a=0; a < strlen(str); a++) // обьявляем цикл
    {
        b=char(str[a]); // присваиваем переменной код символа в ячейке массива
    if (b >= 48 && b <= 57) // условие для цифр
        c++; // наращивваем счетчик
    else if((b >= 0 && b <= 44) || (b==47) || (b >= 58 && b <= 255) || (b >= -64 && b <= -1)) // условие для лишней хрени
        d++; //наращиваем счетчик
    }
    if(c!=0 && d==0) // проверка на правильность ввода
        printf("Молодец!Введено правильно!\n"); // вывод написанного левее
    else if(d!=0) // проверка номер 2
    {
        printf("Плохо!Введенная вами строка содержит недопустимые для этой задачи знаки"); // вывод написанного левее
        z=1; // присваиванее 1 переменной
    }
    b=atof(str); // преобразуем строку в число
    if(z==0) // проверка
    {
    if(b == 0) //проверочка на 0 номер 1
    printf("Значение равно нулю"); //вывод написанного левее
    if(b > 0) //проверочка на 0 номер 2
    printf("Значение больше нуля"); //вывод написанного левее
    if (b < 0) //проверочка на 0 номер 3
    printf("Значение меньше нуля"); //вывод написанного левее
    }
    getch(); //задержка экрана
}
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2012, 03:14     Распознавание содержимого переменной (символы или цифры) #15
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
Вот написал вроде.Подробно всё!. У меня всё работает!!!Надеюсь, что помог.
Если, например, --4, то: "Молодец! Введено правильно! Значение равно 0."
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
04.07.2012, 03:22     Распознавание содержимого переменной (символы или цифры) #16
ну попробую исправить.А минусы тут как сделать - чтобы лишние минусы выдавались как лишние знаки или они дру друга компенсировали?
neske
1474 / 841 / 74
Регистрация: 26.03.2010
Сообщений: 2,889
04.07.2012, 03:26     Распознавание содержимого переменной (символы или цифры) #17
ZaMaZaN4iK, по-твоему --5 число? или ошибка ввода все же?
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
04.07.2012, 03:43     Распознавание содержимого переменной (символы или цифры) #18
Ну в математике есть правило - минус на минус дают +. Поэтому я и спрашиваю - как мне делать?Более 1 минуса сделать ошибкой, или всё же от кол-ва минусов будет зависеть знак числа
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
04.07.2012, 03:50     Распознавание содержимого переменной (символы или цифры) #19
Цитата Сообщение от ZaMaZaN4iK Посмотреть сообщение
А минусы тут как сделать - чтобы лишние минусы выдавались как лишние знаки или они дру друга компенсировали?
Как лишние знаки.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.07.2012, 03:56     Распознавание содержимого переменной (символы или цифры)
Еще ссылки по теме:
C++ Создать новую строку, содержащую вначале символы, а затем цифры из S
C++ Из строки извлечь символы операций в стек, а цифры - в другую строку
Создать строку S2, содержащую вначале цифры, а затем другие символы из строки S C++
Дан символьный массив. Найти символы, которые представляют собой цифры C++
Удалить из строки все символы кроме букв и цифр; заменить цифры на '**' C++

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

Или воспользуйтесь поиском по форуму:
ZaMaZaN4iK
Мой лучший друг-отладчик!
163 / 163 / 9
Регистрация: 24.06.2012
Сообщений: 662
Записей в блоге: 5
Завершенные тесты: 1
04.07.2012, 03:56     Распознавание содержимого переменной (символы или цифры) #20
понял. Попробую

Добавлено через 3 минуты
Вот. Ищите ещё баги
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
// zadacha.cpp: главный файл проекта.
 
/*
Прграмма написана на Microsoft Visual Studio 2010, проект CLR.
Программа распознает минус и может принимать символы с точкой.
Также распознаются как символы русские буквы.
Я писал переменные буквами( мне так удобнее ).Расшифровка для лучшего поняти я ниже:
a - счетчик для цикла
b - мульти-переменная  -  сначала используется для хранения кодов цифр, после - дл хранения полученного числа
c - счетчик для введенных цифр
d - счетчик для введенных символ, специальных символов и всего прочего
z - счетчик для проверки на 0
*/
 
 
 
 
 
 
#include "stdafx.h" // главный добавляемый файл
#include <stdio.h>  // for printf()
#include <conio.h>  // for getch()
#include <string.h> // for strlen(), char()
#include <stdlib.h> // for atof()
 
#define maxline 1000 //константа на размер массива
 
using namespace System;// системная куча памяти для программы (вроде так)
 
void getline(char s[]) // функция для получения строки с клавиатуры
{
    int c,i; // обьявляем переменные
    for (i=0; (c=getchar()) != '\n';i++) // ставим цикл
        s[i]=c; // загоняем в ячейку массива символ
    s[i]='\0'; // присваиваем массиву признак конца строки, чтобы массив стал строкой
}
 
int main() // главная функция
{
    int a,b=0,c=0,d=0,z=0; // обьявляем и инициализируем переменные
    system("chcp 1251"); // пишем, чтобы выводило и ВВОДИЛО также русские буквы
    char str[maxline]; // обьявляем массив
    getline(str); // используем функцию
    for (a=0; a < strlen(str); a++) // обьявляем цикл
    {
        b=char(str[a]); // присваиваем переменной код символа в ячейке массива
    if (b >= 48 && b <= 57) // условие для цифр
        c++; // наращивваем счетчик
    else if((b >= 0 && b <= 44) || (b==47) || (b >= 58 && b <= 255) || (b >= -64 && b <= -1)) // условие для лишней хрени
        d++; //наращиваем счетчик
    if(str[0]=='-' && str[1]=='-') // проверка на минусы
        d++;
    }
    if(c!=0 && d==0) // проверка на правильность ввода
        printf("Молодец!Введено правильно!\n"); // вывод написанного левее
    else if(d!=0) // проверка номер 2
    {
        printf("Плохо!Введенная вами строка содержит недопустимые для этой задачи знаки"); // вывод написанного левее
        z=1; // присваиванее 1 переменной
    }
    b=atof(str); // преобразуем строку в число
    if(z==0) // проверка
    {
    if(b == 0) //проверочка на 0 номер 1
    printf("Значение равно нулю"); //вывод написанного левее
    if(b > 0) //проверочка на 0 номер 2
    printf("Значение больше нуля"); //вывод написанного левее
    if (b < 0) //проверочка на 0 номер 3
    printf("Значение меньше нуля"); //вывод написанного левее
    }
    getch(); //задержка экрана
}
Yandex
Объявления
04.07.2012, 03:56     Распознавание содержимого переменной (символы или цифры)
Ответ Создать тему
Опции темы

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