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

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

Войти
Регистрация
Восстановить пароль
 
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
#1

Как отследить ввод символа в программу - C++

08.04.2010, 13:37. Просмотров 963. Ответов 6
Метки нет (Все метки)

Программа расчета площади поверхности и объема сферы,требуется ввод радиуса.что делать,если пользователь введет букву или ,например, 2lgau. Помогите пожалуйста,программа есть,отслеживает ввод отрицательного значения,а с символами проблема..
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.04.2010, 13:37
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Как отследить ввод символа в программу (C++):

Отследить ввод с клавиатуры... - C++
Доброго времени суток! Господа прошу помочь решить такую задачу: в консольном приложении нужно запретить ввод символов и цыфр, только...

Ввод символа - C++
char b; int c; puts("Int"); scanf("%d", &c); puts("Char"); b = getchar(); putchar(b); Когда ввел число, система не дает...

Проверка на ввод символа - C++
При вводе какого либо символа программа уходит в прострацию надо что бы программ распазновала что это символ и выводила error int main() ...

Проверка на ввод символа - C++
Пользователь вводит несколько строк (имя, фамилия и тд). Не могу сообразить как реализовать проверку, на то что бы вводимые символы не...

Ввод специального символа. - C++
Всем привет. У меня вопрос про символ -  Decimal 26 HEX 1A Подскажите как мне его записать в файл.

Проверка на ввод символа - C++
Предположим вместо числа был введен символ, тогда после ввода символа пропускается вторая строчка cin>>b; и далее заного перезапускается...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
08.04.2010, 13:54 #2
C
1
2
3
4
5
6
7
8
9
10
11
char c, radius[8];
unsigned int i = 0, rad;
cout<<"Vvedite radius: ";
while(c != 13){     //ASCII код клавиши Enter
   c = getch();
   if(c >= '0' && c <= '9')
   radius[i] = c;
   cout<<radius[i];
   i++;
}
rad = atoi(radius);
если кнопка, которую мы нажали является цифрой, то мы добавляем ее в массив и при нажатии Enter выходим из цикла ввода числа
далее с помощью ф-ции atoi() преобразовываем массив цифр radius типа char в целое число rad, что и будет нашим введенным радиусом
также можно сделать и для точки, если нам нужно десятичное число и для backspace (ASCII код вроде 26), если нам не понравилась введенная цифра(i--, ну и на экране на 1 символ назад отступить(gotoxy(wherex()-1, wherey()); для консоли, если не ошибаюсь)
1
GreyDark
8 / 8 / 1
Регистрация: 11.02.2010
Сообщений: 21
08.04.2010, 14:04 #3
Если не консольное приложение, то можно:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
 AnsiString str;
str=DecimalSeparator;
if (AnsiPos(str,Edit1->Text)==0)
{
if ((Key<='9') && (Key>='0') || (Key=='-') || (Key==(Char)VK_BACK)||(Key==DecimalSeparator))
Button1->Enabled=true;
else Key=0;
}
else
if ((Key<='9') && (Key>='0') || (Key=='-')|| (Key==(Char)VK_BACK)) Button1->Enabled=true;
else Key=0;
}
1
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
08.04.2010, 14:19  [ТС] #4
А эту прогу можно как-то переделать?консольная
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <conio.h>
#include <math.h>
int main (void) {
double S,V,R;
 
double pi=3.14;
printf("Vvedite polozhitelnoe znachenie radiusa sfery> R=");
scanf ("%lf",&R);
if (R<=0) { printf ("Vvedite POLOZHITELNOE znachenie,oshibka vvoda> R=");scanf ("%lf",&R);}
 
S=4*pi*(R*R);
V=(4*pi*(R*R*R))/3;
printf ("Ploshad poverhnosti S= %lf\n",S);
printf ("Ee ob'em sostavlyaet V=%lf\n",V);
getch ();
return 0;
}
0
GreyDark
8 / 8 / 1
Регистрация: 11.02.2010
Сообщений: 21
08.04.2010, 14:50 #5
Ты сразу пытаешься считать число, так не выйдет.
0
Vorona
Peace 2 all shining faces
668 / 530 / 45
Регистрация: 05.03.2010
Сообщений: 1,283
08.04.2010, 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
22
23
24
25
26
27
28
29
30
31
32
33
34
#include <cstdio>
#include <conio.h>
#include <cmath>
 
using namespace std;
 
int main ()
{
    double S, V, R;
    int i = 0;
    double pi = 3.14;
    printf("Vvedite polozhitelnoe znachenie radiusa sfery> R=");
    
    char c = 0, radius[15];
    while(c != 13) 
    {
        c = _getch();
        if(c >= '0' && c <= '9')
        {
            radius[i] = c;
            printf("%c", radius[i]);
            i++;
        }
    }
    R = atof(radius);
 
    S = 4 * pi * pow(R, 2);
    V = (4 * pi * pow(R, 3)) / 3;
    printf("\nPloshad poverhnosti S = %lf\n", S);
    printf("Ee ob'em sostavlyaet V = %lf\n", V);
    
    getch();
    return 0;
}
0
Define
0 / 0 / 0
Регистрация: 03.04.2010
Сообщений: 83
08.04.2010, 23:58  [ТС] #7
Большое спасибо,попробую
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.04.2010, 23:58
Привет! Вот еще темы с ответами:

Пропускает ввод символа - C++
Начал изучать с++ и в процессе выполнения наткнулся на проблему. В процессе выполнения программа нормально запрашивает и принимает ...

Вопрос по ввод-вывод одного символа - C++
//программа работает с английскими символами, с русскими - возникают проблемы #include&lt;stdio.h&gt; #include&lt;iostream&gt; void main() { ...

Ввод одного символа и строки с пробелом - C++
Подскажите, пожалуйста, как принять от пользователя с клавиатуры лишь один символ, не дав ему набрать больше, или просто не считать...

Ввод символа в переменную типа INT - C++
Доброго времени суток. Подскажите самый эффективный способ борьбы с неверным вводом данных пользователем. А именно когда пользователя...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
08.04.2010, 23:58
Ответ Создать тему
Опции темы

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