Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
#1

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

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

суть программы
я ввожу 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
09.03.2013, 02:54
Я подобрал для вас темы с готовыми решениями и ответами на вопрос трабл с вводом с клавиатуры (C++):

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

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

Переделать программу со вводом с клавиатуры на ввод из файла
нужно сделать в программе чтоб ввод был из файла, а не с клавиатуры #include...

найти точки пересечения 2 кругов с вводом с клавиатуры центрами и радиусами
найти точки пересечения 2 кругов с вводом с клавиатуры центрами и радиусами

Поместить задаваемое вводом с клавиатуры целое число в начало файла
2)Файл cin.dat содержит последовательность целых чисел. требуется поместить...

Определить совпадает ли задаваемый вводом с клавиатуры символ с последним символом файла
1)Файл cin.dat содержит последовательность символов. требуется определить...

20
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 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
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 11:39  [ТС] #3
BumerangSP, что делает isdigit?
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 11:45 #4
lowlol, проверяет символ на цифру. Можно конечно и так, но так длиннее.
C++
1
if (a[i]>='0' && a[i]<='9')
0
lowlol
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
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 11:56 #6
lowlol, так там стоит "или" (||) вместо "и"(&&). Это разные вещи. Причем должно быть >= и <=. Т.к. если в строке будет 0 или 9, то они не пройдут по условию.
Насчет длинной строки: если мы вводим символов больше, чем места под них выделили, то конец отсекается. Видимо, символы тогда и отсеклись.
0
lowlol
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
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 12:21 #8
lowlol, и что, сейчас также при тех примерах выдает ошибки? В своем примере я указал точный промежуток от 0 до 9.
0
lowlol
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
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 12:29 #10
Проблема может быть в кодировке, русских буквах и прочем. Кстати, а чего цикл только до 5? До 6 надо.
0
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 12:30  [ТС] #11
BumerangSP, ну так с нулевого же: 0 1 2 3 4 5, итого 6 элементов
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 12:31 #12
lowlol, там стоит <5, а, значит, до 5 он и не дойдет. Либо <=5, либо <6.
0
lowlol
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
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 12:57 #14
lowlol, это тоже не совсем верно. Длина строки не всегда 6 будет. А если ввести меньше 6 символов? Уже неверно. Надо до длины строки - strlen(chnum).

Добавлено через 2 минуты
Цитата Сообщение от lowlol Посмотреть сообщение
проверять пустые элементы массива
какие такие пустые?
1
lowlol
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
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 13:20 #16
Там не всегда нули. Мусор всякий, в основном.
В 12-ой студии проблем с русскими символами нет.
0
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 13:26  [ТС] #17
BumerangSP, http://img16.imageshack.us/img16/5451/88219761.png
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 13:35 #18
пред. код.
0
Миниатюры
трабл с вводом с клавиатуры  
lowlol
2 / 2 / 2
Регистрация: 02.12.2012
Сообщений: 102
09.03.2013, 13:41  [ТС] #19
BumerangSP, почему тогда у меня ошибку выдает?
0
BumerangSP
4287 / 1409 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
09.03.2013, 14:13 #20
lowlol, надо в самой студии настройки смотреть.
1
09.03.2013, 14:13
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.03.2013, 14:13
Привет! Вот еще темы с решениями:

C++ траблы с вводом
Как бы так описать проблемку... Как можно сделать ввод с клавиатуры от 0 до...

что-то с вводом
Ввод параметров b и e почему-то не осуществляется и программа их...

необьяснимый трабл
Написать профамму, которая выводит на экран работающие &quot;электронные часы&quot;,...

Трабл с массивом
Дан массив задающийся рандомно. Размерность массива 40. Диапазон значений 0 -...


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

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

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