UpdateData(true);
const char *a = LPCTSTR(m_1);
int i=0;
while(a != '\0')
{
if(isdigit(a) || a==',' || a=='.' || a=='-')
m_2=m_1;
else
{AfxMessageBox("Можно только цифры и точку(запятую)");
break;}
i++;
}
UpdateData(false);
Проблема с русскими буквами (символами)
Написан такой код для кнопки и двух editbox, в один из которых вводятся символы, в другом выводятся, если проверка прошла, или выдается сообщение, что такие символы недопустимы:
Код:
Алгоритм срабатывает на любые символы, кроме русских букв, причем некоторых. Например, на букву й не срабатывает, на ц и у срабатывает, на к не срабатывает и т.д.
Подозреваю, что компилятор просто воспринимает эти буквы, как числа и, соответственно, пропускает их. Какие пути решения этой проблемы возможны?
Заранее благодарен.
Забыл добавить, пишу в Visual c++ 6.0
Код:
bool funct(const char *a)
{
int i=0;
while(a != '\0')
{
if( !((','<=a) && (a<='9') ) && a!='/'))
return FALSE;
i++;
}
return TRUE;
}
UpdateData(TRUE);
if(funct(LPCTSTR(m_1))) m_2=m_1;
else AfxMessageBox("Можно только цифры и точку(запятую)");
UpdateData(FALSE);
{
int i=0;
while(a != '\0')
{
if( !((','<=a) && (a<='9') ) && a!='/'))
return FALSE;
i++;
}
return TRUE;
}
UpdateData(TRUE);
if(funct(LPCTSTR(m_1))) m_2=m_1;
else AfxMessageBox("Можно только цифры и точку(запятую)");
UpdateData(FALSE);
Или функцию можно записать и так
Код:
bool funct(const char *a)
{
while(*a)
{
if( !((','<=*a) && (*a<='9') ) && *a!='/'))
return FALSE;
*a++;
}
return TRUE;
}
{
while(*a)
{
if( !((','<=*a) && (*a<='9') ) && *a!='/'))
return FALSE;
*a++;
}
return TRUE;
}
Благодарю! Хотя достаточно было бы и этой строчки:
Код:
if( ((','<=a) && (a<='9') ) && a!='/'))
Я хотел как раз исключить русские буквы таким способом, но не получилось, ибо начинающий я. :)
Для тех кому это тоже нужно, хочу заметить, что в этой строчке не должно быть первого отрицания (если я не прав, поправьте меня):
Код:
if( !((','<=a) && (a<='9') ) && a!='/'))
А у вас эта операция происходит каждый раз если выполняется условие if(isdigit(a) || a==',' || a=='.' || a=='-').