2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
1

трабл с вводом с клавиатуры

09.03.2013, 02:54. Показов 1439. Ответов 20
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
суть программы
я ввожу 2 числа и программа вычисляет такую штуку:
число1%число2
в head объявляю класс
в method описываю методы класса
в main пример работы
вот, что наработал:
head
C++
1
2
3
4
5
6
7
8
9
10
11
12
#include <iostream>
class integer
    {
    private:
        char chnum[6];
        char chmod[6];
        int num;
        int mod;// возможность выбора делителя
    public:
        int division();
        integer();
    };
method
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 "head.h"
#include <iostream>
#include <string>
int integer::division()
    {
       int res;
       res=num%mod;
       std::cout<<"Result:"<<std::endl;
       return res;
    }
integer::integer()
    {
       std::cout<<"enter num"<<std::endl;
       std::cin>>chnum;
       bool a=true;
       for (int i=0; i<5; i++)
           {
             if(chnum[i]<'0' || chnum[i] >'9')
                 {
                   a=false;
                   std::cout<<"error";
                   break;
                 }
           }
       if (a!=0)
           {
             num=atoi(chnum);
           }
       std::cout<<"enter mod"<<std::endl;
       std::cin>>chmod;
       bool b=true;
       for (int i=0; i<5; i++)
           {
             if(chmod[i]<'0' || chmod[i] >'9')
                 {
                   b=false;
                   std::cout<<"error";
                   break;
                 }
           }
       if (b!=0)
           {
             mod=atoi(chmod);
           }
    }
main
C++
1
2
3
4
5
6
7
#include <iostream>
#include "head.h"
void main()
    {
        integer a;
        std::cout<<a.division()<<std::endl;
    }
чуть не забыл, хочу запретить ввод букв, а вернее выдавать ошибку при вводе буквы
идея у меня была такая: проверить каждый элемент массива чар на то, буква ли он, если буква, то выдадим ошибку
если цифра, то массив через atoi передадим в интовую переменную, но хоть убей не получается( есть подозрение, что что-то не так с условием проверки на букуву)
нид хелп
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
09.03.2013, 02:54
Ответы с готовыми решениями:

Трабл с вводом/выводом
Вот есть код: #include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main(){ ...

Управление вводом с клавиатуры в С++
Добрый день, подскажите как добиться вот этого результата на С++ вот пример: нажимаю я клавишу...

Дополнить программу вводом данных с клавиатуры
Здравствуйте ! Есть программа которая выводит данные(имя, фамилия, номер телефона, все с новой...

Задание размера матрицы вводом с клавиатуры
Задана квадратная матрица А размером NХN (N&lt;=10), состоящая из действительных элементов. Заменить...

20
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 11:36 2
Простой метод: пройтись посимвольно и посчитать количество цифр. Если их меньше длины строки, значит, число уже не целое.
C++
1
2
3
4
5
6
7
8
char a[6];
int cnt = 0;
std::cin>>a;
for (int i=0; i<strlen(a); ++i)
   if (isdigit(a[i]))
      cnt++;
if (cnt != strlen(a))
   std::cout<<"Err";
1
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 11:39  [ТС] 3
BumerangSP, что делает isdigit?
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 11:45 4
lowlol, проверяет символ на цифру. Можно конечно и так, но так длиннее.
C++
1
if (a[i]>='0' && a[i]<='9')
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 11:54  [ТС] 5
Цитата Сообщение от BumerangSP Посмотреть сообщение
lowlol, проверяет символ на цифру. Можно конечно и так, но так длиннее.
C++
1
if (a[i]>='0' && a[i]<='9')
насчет такого способа:
в коде, который наверху, я и пытался его осуществить, но, допустим, когда я вводил 123, он выводил error.когда вводил какую либо букву - аналогичная ситуация.а когда вводил допустим 1234567abc, т.е. строку подлиннее, то error он не выдавал
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 11:56 6
lowlol, так там стоит "или" (||) вместо "и"(&&). Это разные вещи. Причем должно быть >= и <=. Т.к. если в строке будет 0 или 9, то они не пройдут по условию.
Насчет длинной строки: если мы вводим символов больше, чем места под них выделили, то конец отсекается. Видимо, символы тогда и отсеклись.
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 12:08  [ТС] 7
BumerangSP, у меня было: если элемент левее 0 или правее 9, то я останавливаю цикл и выдаю ошибку. так неверно?
C++
1
2
3
4
5
if(chnum[i]<'0' || chnum[i] >'9')
                 {
                   a=false;
                   std::cout<<"error";
                   break;
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 12:21 8
lowlol, и что, сейчас также при тех примерах выдает ошибки? В своем примере я указал точный промежуток от 0 до 9.
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 12:24  [ТС] 9
BumerangSP,
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cout<<"enter num"<<std::endl;
       std::cin>>chnum;
       int c=0;
       for (int i=0; i<5; i++)
           {
              if(isdigit(chnum[i]))
                  c++;
           }
       if (c!=strlen(chnum))
           {
              std::cout<<"Err";
           }
если пишу вот так, то вылетает окно с дебаг асертейшн фэил: с>= -1 && c<=255
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 12:29 10
Проблема может быть в кодировке, русских буквах и прочем. Кстати, а чего цикл только до 5? До 6 надо.
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 12:30  [ТС] 11
BumerangSP, ну так с нулевого же: 0 1 2 3 4 5, итого 6 элементов
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 12:31 12
lowlol, там стоит <5, а, значит, до 5 он и не дойдет. Либо <=5, либо <6.
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 12:38  [ТС] 13
BumerangSP, точно, сейчас исправлю

Добавлено через 4 минуты
BumerangSP, в общем, я кажется понял
C++
1
2
3
4
5
6
7
8
9
10
11
12
std::cout<<"enter num"<<std::endl;
       std::cin>>chnum;
       bool a=true;
       for (int i=0; i<6; i++)
           {
             if((chnum[i]>='0' && chnum[i] <='9')==0)
                 {
                   a=false;
                   std::cout<<"error";
                   break;
                 }
           }
вот с таким кодом, он не выводит еррор только если я ввожу 6 значное число, т.е. мне нужно как-нибудь не проверять пустые элементы массива
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 12:57 14
lowlol, это тоже не совсем верно. Длина строки не всегда 6 будет. А если ввести меньше 6 символов? Уже неверно. Надо до длины строки - strlen(chnum).

Добавлено через 2 минуты
Цитата Сообщение от lowlol Посмотреть сообщение
проверять пустые элементы массива
какие такие пустые?
1
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 13:01  [ТС] 15
BumerangSP, спасибо, все заработало, но есть еще один аспект, выдает err только если я ввожу англ буквы, с русскими ассертейшн фэил

Добавлено через 49 секунд
Цитата Сообщение от BumerangSP Посмотреть сообщение
lowlol, это тоже не совсем верно. Длина строки не всегда 6 будет. А если ввести меньше 6 символов? Уже неверно. Надо до длины строки - strlen(chnum).

Добавлено через 2 минуты

какие такие пустые?
ну допустим если я ввел 1, то у меня массив был бы 1 0 0 0 0 0
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 13:20 16
Там не всегда нули. Мусор всякий, в основном.
В 12-ой студии проблем с русскими символами нет.
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 13:26  [ТС] 17
BumerangSP, http://img16.imageshack.us/img16/5451/88219761.png
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 13:35 18
пред. код.
Миниатюры
трабл с вводом с клавиатуры  
0
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 13:41  [ТС] 19
BumerangSP, почему тогда у меня ошибку выдает?
0
4311 / 1422 / 463
Регистрация: 16.12.2010
Сообщений: 2,939
Записей в блоге: 3
09.03.2013, 14:13 20
lowlol, надо в самой студии настройки смотреть.
1
09.03.2013, 14:13
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
09.03.2013, 14:13
Помогаю со студенческими работами здесь

Посчитать уравнение с вводом значений с клавиатуры
По заданию нужно создать пользовательскую функцию DEFUN, посчитать уравнение, при этом значения a,...

Заполнить файл числами вводом с клавиатуры.
Ребята, помогите исправить... Нужно, что бы в этой программе не компьютер автоматически вводил...

Сортировка двумерного массива с вводом с клавиатуры
Нужно ввести с клавиатуры массив, затем по нажатию ентер он должен отсортироваться в виде столбца...

Проблема с вводом данных типа String с клавиатуры
У меня есть к примеру вот такая часть кода и мне необходимо ввести данные с клавиатуры (несколько...


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru