Для начала сойдет и WinInet. http://www.rsdn.ru/article/inet/wininet.xml Сокеты для самого начала очень сложно будет
Всем доброго времени суток! Подскажите плиз. Есть код консольного приложения С++, сравнивающий заглавные и прописные буквы алфавита. Если сравнение идет латиницы - все работает. Если в сравнение подставлять кириллицу, то, символ вводимый с клавиатуры отображается в консоли, но либо не определяется кодом, либо определяется как нечто невразумительное. Компилятор MSVS 2010. Заранее признателен! PHP: //Ex3_01.cpp // Демонстрация вложенных операторов if #include "locale.h" #include <iostream> #include "windows.h" using namespace std; int main() { setlocale(LC_ALL, "english"); char letter = 0; // Для хранения введенного значения cout << endl << "Введите букву: "; // Приглашение к вводу cin >> letter; // Считывание символа if(letter >= 'A') // Больше или равно А if(letter <= 'Z') // Меньше или равно Я { cout << endl << "Вы ввели заглавную букву: " << endl << letter << endl; return 0; } if(letter >= 'a') // Больше или равно а if(letter <= 'z') // Меньше или равно я { cout << endl << "Вы вввели прописную букву: " << endl << letter << endl; return 0; } cout << endl << "Вы ввели не букву, а х*ню!!!" << endl; return 0; }
а ты знаешь что латинские буквы умеют последовательные коды, а кирилические имеют разрыв в числовых кодах гдето, поэтому для латиницы верно if(a > 'a' && a< 'a') а для кирилицы if(a > 'a' && a<'a') неверно. Распечатай коды всех символов и увидишь. Кстати Крилица вообще имеет отрицательные коды поэтому последний вариант вообще неверен. Code: for(int i = -128; i<128; i++) cout<<i<<" = "<<(char)i<<endl; Правда я у тебя в коде вообще ничего связанного с крилицей кроме комментариев не увидел, так что неуверен что именно ты имел в виду.
Создай таблицу (а вернее массив) кириллицы, где каждой букве соответсвуют некоторые УПОРЯДОЧЕННЫЕ значения, которые будут совпдать с алфавитом. ну и, например, у тебя в int c, b - кириллическиe символы, тогда в коде будет так: (table[c].id < table.id) ? #doSomethingFor_c# : #doSomethingFor_b# То есть я предлагаю тебе иметь свою собственную таблицу кириллицы.
слишком роскошно. Нужно всего то чуть переделать проверки и все, а для этого нужно знать какие кода имеют кириллические символы, а для этого нужно их распечатать и самому посмотреть, что я посоветовал сделать
Самое забавное, что, если вводить буквы от "р" до "я", программка сообщает о введении букв от "а" до "п"... И ругается на первую часть алфавита.
A = -128 && Я = -97 || Ё = -16 a = -96 && п = -81 || p = -31 && я = -17 || ё = 15 проверка для кирилици будет выглядеть так Code: char a; cin>>a; if(a>='A' && a<='Я' || a == 'Ё') cout<<"Заглавная"; else if (a >= 'a' && a<='п' || a>='p' && a<='я' || a == 'ё') cout<<"строчная"; Code: #include <iostream.h> int main() { char a; for(int i=0; i<10; i++) { cin>>a; if(a>=-128 && a<=-97 || a == -16) std::cout<<"Big\n"; else if (a >= -96 && a<=-81 || a>=-32 && a<=-17 || a == -15) std::cout<<"Litle\n"; } return 0; } проверено - работает.
Хм... Работает, но не совсем корректно. (может я не совсем точно обрисовал чего хотел добиться от программки... сорри за скудоумие) Т.е. определяется заглавная или прописная буква. С этим я разобрался. Смысл моего обращения был в том, что некорректно интерпритируются нажатия клавиш, т.е. - вводишь из диапазона р-я, пишет: "Вы ввели прописную букву:..." и выводит символы из диапазона а-п. - вводишь а-п: "Вы ввели прописную букву:" Смысл был в том, чтобы не только определять регистр символов, но и выводить ВВЕДЕННЫЙ символ в консоль после фразы "Вы ввели прописную букву:"
3 раза перечитал прежде чем понял что у тебя за проблема; Ты нибось русские буквы в консоль выводишь так же как и латинские ?) Code: cout<<a; Ну так вот зная что cout не умеет русские буквы в консоль писать. Для этого нужно предварительно конвертировать текст. Вот те пример, а дальше ищи сам Code: using namespace std; int main(int argc, char* argv[]) { char str[10] = «мама мыла»; char buf[10]; CharToOem(str, buf); cout << buf << endl; getch(); return 0; }
Код взят из книги Хортона по VC++. Это пример применения вложенных операторов if. PHP: // Ex3_01.cpp // A nested if demonstration #include <iostream> using std::cin; using std::cout; using std::endl; int main() { char letter = 0; // Store input in here cout << endl << "Enter a letter: "; // Prompt for the input cin >> letter; // then read a character if(letter >= 'A') // Test for 'A' or larger if(letter <= 'Z') // Test for 'Z' or smaller { cout << endl << "You entered a capital letter." << endl; return 0; } if(letter >= 'a') // Test for 'a' or larger if(letter <= 'z') // Test for 'z' or smaller { cout << endl << "You entered a small letter." << endl; return 0; } cout << endl << "You did not enter a letter." << endl; return 0; } После приглашения вводим заглавную или строчную букву, программка распознает ее и выводит сообщение о том, в каком регистре введена буква. Захотелось не много подправить программку, а именно: во-первых - чтобы все приглашения и сообщения выводились на русском (элементарно решается); во-вторых - чтобы введенный символ не только распознавался по регистру, но и выводился на экран после опознания; Вот с последним пунктом и возникли проблемы. Не могу реализовать.
ептать!!! да нахрена ты выкладываешь код который абсолютно правильно работает ??? Ты выложи тот где у тебя ошибки.
Borland C++ PHP: void main () { unsigned char menu; do{ cout << "Hello, world\n"; cin >> menu; }while(menu != 5); } Не смотря на ввод пятёрки, цикл продолжает "крутиться", что не так то ? o_0
Вы вводите не 5 а символ '5'. т.к. unsigned char menu; =>while(menu != '5') или unsigned int menu; while(menu != 5)
ах блин, точно)) Irdis, спасибо! -- А правда, почему он не ругается, если я сравниваю разные типы данных ?
и не должен происходит простое расширение char в int вот если бы int в char приводился то тогда еще можно выдать предупреждение и то даже int в char например так int in = ~0u / 2; char c = in; компиятор C/C++ глотает если только включить самый высокий уровеь предупреждений попробовать а все потому что миллионы строк кода спокойно присваивают int в char поэтому в С++ решили не выдавать предупреждение на этот счет так пишет страуструп а в Си вообще фиолетово было всегда