Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Общие вопросы > работа c ASCII


Автор: koljan 2.3.2006, 22:02
Код

#include <iostream>
#include <conio.h>
main()
{
    //переменные
    char ch;
    int a;
    std::cout<<"vvedite simvol\n";
    std::cin>>ch;
    a=(int)ch;

         //ch=/*ловим клавишу*/;
          //a=/*загоняем код клавиши*/;
          if ((a>=65) & (a>=90) || (a>=97) & (a<=122) || (a>=128) & (a<=175) || (a>=224) & (a<=241) || (a>=48) & (a<=57))
              std::cout<<"Vi vveli "<<ch<<"\n";
          else
          {
              std::cout<<"Vi vveli ne bukvu i ne cifru\n"; 
          }
        
          getch();
          
   return 0;
}


эта прога почти работает точнее работает только при вводе маленьких англ. букв и цифр большие англ. уже не пашут что делать?

Автор: BreakPointMAN 2.3.2006, 23:00
уффф... smile
С логикой, наверное, есть проблемы...

65 == A
90 == Z
Если мы хотим проверить, что значение переменной a у нас лежит в этом диапазоне, значит, наверное, мы должны писать так:
Код

if((a>=65) && (a<=90))...

У тебя почему-то второе условие записано как: "(a>=90)"...
Причем, для строчных латинских букв ты все сделал правильно...

Кроме того, "&" - это побитовое "И". А логическое "И" - это "&&".
Да и с группировкой условий у тебя тоже не все хорошо...

Автор: BreakPointMAN 2.3.2006, 23:19
С учетом вышесказанного, условие должно выглядеть примерно так:
Код

if ((a>=65 && a<=90) || (a>=97 && a<=122) ||(a>=128 && a<=175) ||(a>=224 && a<=241) ||(a>=48 && a<=57)) ...

Кстати, char - это и так целочисленный тип, зачем нужно делать вот это, я не понимаю:
Код

int a;
..
a=(int)ch;


Для надежности лучше определи переменную ch как unsigned char, так больше вероятность корректной работы с символами из второй половины кодировочной таблицы.

Ну, и последнее по данному вопросу: есть замечательные функции isalpha и isdigit... smile


Автор: koljan 2.3.2006, 23:53
Цитата(BreakPointMAN @ 2.3.2006, 23:00 Найти цитируемый пост)
Кроме того, "&" - это побитовое "И". А логическое "И" - это "&&".

в чём различие?
и ещё как с русским алфавитом быть?

Автор: BreakPointMAN 3.3.2006, 00:05
Цитата(koljan @ 2.3.2006, 23:53 Найти цитируемый пост)
и ещё как с русским алфавитом быть?

в смысле "как быть"?

Автор: koljan 3.3.2006, 00:19
Цитата(BreakPointMAN @ 3.3.2006, 00:05 Найти цитируемый пост)
Цитата(koljan @ 2.3.2006, 23:53 )
и ещё как с русским алфавитом быть? 

в смысле "как быть"?


ну если я русскую букву печатаю то выдаёт что не буква и не цифра


Код

#include <iostream>
#include <conio.h>
main()
{
    //переменные
    char ch;
    std::cout<<"vvedite simvol\n";
    std::cin>>ch;
    
         //ch=/*ловим клавишу*/;
          
          if ((ch>=65 && ch<=90) || (ch>=97 && ch<=122) || (ch>=128 && ch<=175) || (ch>=224 && ch<=241) || (ch>=48 && ch<=57))
              std::cout<<"Vi vveli "<<ch<<"\n";
          else
          {
              std::cout<<"Vi vveli ne bukvu i ne cifru\n"; 
          }
        
          getch();
          
   return 0;
}

Автор: BreakPointMAN 3.3.2006, 00:33
Цитата(koljan @ 3.3.2006, 00:19 Найти цитируемый пост)
ну если я русскую букву печатаю то выдаёт что не буква и не цифра


Цитата(BreakPointMAN @ 2.3.2006, 23:19 Найти цитируемый пост)
Для надежности лучше определи переменную ch как unsigned char, так больше вероятность корректной работы с символами из второй половины кодировочной таблицы.


Автор: koljan 3.3.2006, 00:39
smile

всё отлично
и ещё (только не ругайте за кол-во вопросов)
прочитал все темы про русские буквы при выводе на консоль но у меня ничего не выходит

Автор: BreakPointMAN 3.3.2006, 00:46
Цитата(koljan @ 3.3.2006, 00:39 Найти цитируемый пост)
но у меня ничего не выходит

Покажи, как ты делаешь, и что у тебя не выходит - посмотрим...

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)