Я просто играл с персонажами, используя очень простую программу на C ++, позвольте мне объяснить ситуацию:
#include<iostream>
int main(){
char c;
std :: cin >> c;
std :: cout << "The integer value of character entered is : " << int(c) << '\n';
int m = 12 + 'á';
std :: cout << m << '\n';
return 0;
}
теперь, когда я выполняю вышеупомянутую программу, я ввожу значение c как ‘á’, которое находится в наборе символов испанского языка и типизируется как «Alt + 160» в окнах, и потому что мой компьютер реализует простой старый символ как знак со знаком выше Программа выводит целое значение ‘á’ как -96, но странная вещь случается, когда я выводю значение m, она возвращает вывод как -19 вместо -84, тогда как если я выполняю следующую программу -:
#include<iostream>
int main(){
signed char c;
std :: cin >> c;
std :: cout << "The integer value of character entered is : " << int(c) << '\n';
int m = 12 + c;
std :: cout << m << "\n";
return 0;
}
Я получаю правильное выходное значение, теперь я не понимаю, почему это происходит, если каждый символ поддерживается каким-либо числом в компьютере, тогда почему выражение m = 12 + ‘á’ не оценивается как m = 12 + (- 96). Пожалуйста, просветите меня по этому вопросу. Я использую Windows 7 и Dev C ++
Я только что сказал, что 160 не код для á
… ну, я был неправ, это так, в кодовой странице CP437 или DOS. В кодовой странице Windows (CP1252) á
225, но, видимо, Windows не использует кодовую страницу Windows в консоли.
Ваш редактор может использовать или не использовать CP437, CP1252, UTF8 или что-либо еще. Посмотрите на вашу программу в шестнадцатеричном редакторе, чтобы быть уверенным. Более того, никогда не используйте ничего, кроме простого 7-битного ASCII в тексте вашей программы, особенно в Windows, но в целом и везде. Эти вещи не переносимы даже между разными компьютерами, на которых установлена одна и та же версия одной и той же ОС, и не допускаются стандартом. Они придут и укусят вас. Если вам нужны строки символов не ASCII в вашей программе, прочитайте их из файла данных, никогда не вставляйте их в исходный код.
Когда вы работаете с текстом в вашей программе, всегда проверяйте правильность кодировки. Это НЕ просто, особенно в Windows, когда используется Visual Studio и стандартные библиотеки ввода-вывода C и / или C ++. Я не смог заставить эту комбинацию работать с UTF-8.
Других решений пока нет …