Здравствуйте.
Возможно, мой вопрос окажется простым

, но у меня не получилось найти ответ

:
В программе(C++Builder6) есть некое поле для ввода. В это поле должно вводиться только число. На Delphi мне порекомендовали вот такой приёмчик

:
PROCEDURE TLab2.Edit1KeyPress(Sender: TObject; VAR Key: Char);
BEGIN
CASE Key OF
#48..#57,#8:;
ELSE Key:=#0;
END;
END;
Мне интересно собственно, как
это переделать на C?(через swith выглядит как-то коряво, да ещё и компилятор ругается)
P. S. Применяться данная процедура будет не только на Edit`ах(ещё, например в StringGreed`ах), так что MaskEdit использовать не получится.
P. P. S. Найти ответ на вебе я, конечно, пытался, но по любому вопросу, связанному с символами вываливается столько мусора...
P. P. P. S. #8 — код BackSpace, в котором основная загвоздка(были какие-то варианты, но с ним они не работали

) и заключается.
P. P. P. P. S. Может пригодится: это — текст проги, по которой я искал коды этих символов:
PROGRAM P;
USES CRT;
VAR Key: Char;
BEGIN
ClrScr;
WHILE True DO BEGIN
Key:=ReadKey;
IF (Key=#0) AND KeyPressed THEN Key:=ReadKey;
WriteLn(Key,' - #',ORD(Key));
IF Key=#27 THEN Exit;
END;
END.
26.12.05 13:04: Перенесено модератором из 'C/C++. Прикладные вопросы' — Кодт
Здравствуйте, diro, Вы писали:
D>char num_key_read(char key)
D>{
D> return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
D>}
D>Если речь об ANSI.
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
char num_key_read(char key)
{ //В этом месте выдаёт еррор: [C++ Error] Unit1.cpp(21): E2141 Declaration syntax error
//К сожалению, у меня убогая, кракнутая версия и в ней нет хелпа, не подскажете, what есть что?
return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
};
}
Здравствуйте, Vitar, Вы писали:
V>Здравствуйте, diro, Вы писали:
D>>char num_key_read(char key)
D>>{
D>> return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
D>>}
D>>Если речь об ANSI.
V>V>void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
V>{
V>char num_key_read(char key)
V>{ //В этом месте выдаёт еррор: [C++ Error] Unit1.cpp(21): E2141 Declaration syntax error
V> //К сожалению, у меня убогая, кракнутая версия и в ней нет хелпа, не подскажете, what есть что?
V>return (key < 33) || ( (key > 79) && (key < 90 ) ) ? key : 0x00;
V>};
V>}
V>
Влощенные функции вне закона!
Ну я Борланд C++ взапускал в своей жизни один только раз

, поэтому всех нюансов программирования в этой среде не знаю, функцию пример написал на vc++.
По аналогии с Delphi, выглядеть должно как-то так:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
Key = (Key < 33) || ( (Key > 79) && (Key < 90 ) ) ? Key : 0x00;
}
Сразу предупреждаю, это не универсально все. Т.е. речь о том, что вот можно например ввести пробел, Tab, короче WhiteSpace. Поэтому лучше структуру сделать, например такой:
void __fastcall TForm1::Edit1KeyPress(TObject *Sender, char &Key)
{
Key = ((Key < 33) && (Key != 0x20) && (Key != 0x09) ) || ( (Key > 79) && (Key < 90 ) ) ? Key : 0x00;
}