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

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

Войти
Регистрация
Восстановить пароль
 
hasys
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
#1

Вопросы по типу char - C++

07.03.2012, 17:57. Просмотров 898. Ответов 10
Метки нет (Все метки)

Читаю книгу Страуструпа. Дошёл до типа char. В книге приводится такой пример:

C++
1
2
3
4
5
6
7
#include <iostream>
 
int main(){
    char c;
    std::cin >> c;
    std::cout << "the value of'" << c << "' is " << int(c) << '\n';
}
Чтобы разобраться чуть лучше, я написал вот так:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
using namespace std;
int main(){
    char c;
    signed char sc;
    unsigned char usc;
    wchar_t wc;
    do{
        cin >> c;
        sc = c;
        usc = c;
        wc = c; 
        cout << "the value of '" << c << "' is " << int(c) << '\n';
        cout << "the signed value of '" << c << "' is " << int(sc) << '\n';
        cout << "the unsigned value of '" << c << "' is " << int(usc) << '\n';
        cout << "the wide value of '" << c << "' is " << int(wc) << '\n';
    }while(c != 'q');
}
Запустил программу, получил вот это:

a
the value of 'a' is 97
the signed value of 'a' is 97
the unsigned value of 'a' is 97
the wide value of 'a' is 97
ф
the value of 'С' is -47
the signed value of 'С' is -47
the unsigned value of 'С' is 209
the wide value of 'С' is -47
the value of '„' is -124
the signed value of '„' is -124
the unsigned value of '„' is 132
the wide value of '„' is -124
q
the value of 'q' is 113
the signed value of 'q' is 113
the unsigned value of 'q' is 113
the wide value of 'q' is 113

Методом научного тыка выяснилось, что в c++ char это signed char. Что меня больше интересует, это почему программа, символы из расширенной таблицы ASCII обрабатывает как два символа?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.03.2012, 17:57     Вопросы по типу char
Посмотрите здесь:

Адрес переменной к типу (char*) - C++
Здравствуйте. Для &quot;запоминания&quot; данных переменных можно использовать сериализацию аля: int i = 12; ofstream f(&quot;text.txt&quot;); ...

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

Как присвоить типу char значение string? - C++
При выполнении строки w.at(1)=l; выдает error2440 cannot convert from std::string to char как перевести l в char или w.at в...

Написать шаблон класса очередь, и сделать к типу char спецификацию - C++
по заданию, нужно написать шаблон класса очередь, и сделать к типу char спецификацию, вот тут сообственно и начинаются проблемы, сам шаблон...

2IntelliSense: выражение должно относиться к целочисленному типу или типу перечисления без области видимости - C++
&quot;Выражение должно относиться к целочисленному типу или типу перечисления без области видимости&quot; Что это за ошибка такая и как ее исправить?...

что происходит со старым конструктором когда я создаю новый, пренадлежащий производному типу? (первый конструктор пренадлежит базовому типу) - C++
1) что происходит со старым конструктором когда я создаю новый, пренадлежащий производному классу? (первый конструктор пренадлежит базовому...

Разница между new char[] и new char[]() - C++
Доброго времени суток. Подскажите пожалуйста разницу, между следующим кодом: char* ch = new char; и char* ch = new...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
07.03.2012, 17:59     Вопросы по типу char #2
Скорее всего потому, что utf8.
hasys
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
07.03.2012, 18:11  [ТС]     Вопросы по типу char #3
Написал так:

C++
1
2
3
4
5
6
7
8
9
#include <iostream>
using namespace std;
int main(){
    wchar_t wc;
    do{
        wcin >> wc;
        cout << "the wide value of'" << wc << "' is " << int(wc) << '\n';
    }while((char)wc != 'q');
}
При вводе символа из расширенной таблицы уходит в бесконечный цикл. При латинице работает как часы.
Deviaphan
Делаю внезапно и красиво
Эксперт C++
1286 / 1220 / 50
Регистрация: 22.03.2011
Сообщений: 3,744
07.03.2012, 18:30     Вопросы по типу char #4
cout не выводит unicode. Используй wcout.
hasys
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
07.03.2012, 18:45  [ТС]     Вопросы по типу char #5
Всё равно впадает в бесконечный цикл при вводе символа не из стандартной библиотеки. Где можно почитать, почему так происходит?

Добавлено через 10 минут
С каждой минутой с++ становится всё непонятней и непонятней. Сейчас читаю про int, там написано, что в отличает от char он всегда со знаком. Но если смотреть по программе выше, то и char тоже со знаком... Ничего я в этом C++ не понимаю
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
07.03.2012, 18:58     Вопросы по типу char #6
знаковый или беззнаковый тип char - зависит от реализации
hasys
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
07.03.2012, 19:04  [ТС]     Вопросы по типу char #7
Написал так:

C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main(){
    wchar_t wc;
    while(wcin >> wc){
        wcout << "the wide value of'" << wc << "' is " << int(wc) << '\n';
    }
}
Теперь если написать символ из расширенной таблицы - просто выходит из программы. Может быть это критично, не знаю, но я использую Ubuntu GNU/Linux, G++ compiler.
retmas
Жарю без масла
859 / 741 / 164
Регистрация: 13.01.2012
Сообщений: 1,694
07.03.2012, 19:06     Вопросы по типу char #8
Цитата Сообщение от hasys Посмотреть сообщение
При вводе символа из расширенной таблицы уходит в бесконечный цикл.
решил воспроизвести у себя. как не старался не вышло бесконечного цикла.
напишите, что вводите
diagon
Higher
1927 / 1193 / 49
Регистрация: 02.05.2010
Сообщений: 2,925
Записей в блоге: 2
07.03.2012, 19:09     Вопросы по типу char #9
Цитата Сообщение от hasys Посмотреть сообщение
Написал так:

C++
1
2
3
4
5
6
7
8
#include <iostream>
using namespace std;
int main(){
    wchar_t wc;
    while(wcin >> wc){
        wcout << "the wide value of'" << wc << "' is " << int(wc) << '\n';
    }
}
Теперь если написать символ из расширенной таблицы - просто выходит из программы. Может быть это критично, не знаю, но я использую Ubuntu GNU/Linux, G++ compiler.
C++
1
2
3
#include <locale>
//...
locale::global( locale("") ); //после int main()
И все заработает.
NoMasters
Псевдослучайный
1744 / 1087 / 71
Регистрация: 13.09.2011
Сообщений: 3,115
07.03.2012, 19:11     Вопросы по типу char #10
C++
1
2
3
4
5
6
7
8
9
10
11
#include <iostream>
#include <cstdlib>
using namespace std;
int main(){
    locale l(getenv("LANG"));
    locale::global(l);
    wchar_t wc;
    while(wcin >> wc){
        wcout << "the wide value of'" << wc << "' is " << int(wc) << '\n';
    }
}
Добавлено через 24 секунды

Не по теме:

so slooooow

MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.03.2012, 19:16     Вопросы по типу char
Еще ссылки по теме:

Cannot convert parameter 1 from 'char' to 'char []' - C++
#include &lt;iostream&gt; using namespace std; const int MAX=20; class base { public: virtual char sry(char str, char s)=0; }; ...

В чем отличие char* s от char *s - C++
В чем отличие char* str; от char *str; ?

Невозможно преобразовать char* в char - C++
Как исправить ошибку?

E2034 Cannot convert 'char' to 'char *' - C++
Добрый день всем! Помогите плз исправить ошибку. Не понимаю чего она происходит. Вообщем, нужно все елементы строки text запихнуть в...

Копирование char* в массив char[i]* - C++
Друзья, не бейте, искал, то что нашел - не помогло. Использую WinAPI, но это не суть важно сейчас. Весь код под спойлером у меня есть...


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

Или воспользуйтесь поиском по форуму:
hasys
11 / 11 / 2
Регистрация: 18.01.2010
Сообщений: 53
07.03.2012, 19:16  [ТС]     Вопросы по типу char #11
Всем спасибо, теперь всё работает

решил воспроизвести у себя. как не старался не вышло бесконечного цикла.
напишите, что вводите
Например любую букву кирилицы.
Yandex
Объявления
07.03.2012, 19:16     Вопросы по типу char
Ответ Создать тему
Опции темы

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