0

Вот мой код. Вначале кода я проверяю какому числу соответствует каждая буква русского алфавита. Выходят числа от -32 до -1 для а...я и от -64 до -33 для А...Я. После хочу с этим работать и выходит ошибка. Проверяю в конце кода какому числу соответствуют те же буквы и там уже, например, для а -95, для б -94 и тд.

#include <stdio.h>
#include <string.h>
#include <locale.h>

int main() { setlocale(LC_ALL, "RUS"); char alp[100] = "абвгдеёжзийклмнопрстуфхцчшщъыьюэя"; char alp1[100] = "АБВГДЕЖЗИЙКЛМНОПРСТУФХЦЧШЩЪЫЬЭЮЯ"; //for (int i = 0; i < 33; i++){ //printf("%c - %d\n", alp[i], (int)(alp[i])); //} char str[100]; gets(str); for (int i = 0; i < strlen(str); i++) { if((int)(str[i]) > -32 && (int)(str[i]) < -1) { str[i] = (char)((int)(str[i]) - 32); } } puts(str); printf("%d", (int)(str[0])); }

  • Как это воспроизвести? У меня, например, не получается... Дайте такой код, чтоб это было точно видно. – Harry Oct 14 '23 at 19:04
  • Исходный код в кодировке Windows-1251, а консоль в CP866??? – wololo Oct 14 '23 at 19:10
  • `#include <stdio.h> #include <string.h> #include <locale.h>

    int main() { setlocale(LC_ALL, "RUS"); char alp[100] = "абвгдеёжзийклмнопрстуфхцчшщъыьюэя"; for (int i = 0; i < 33; i++){ printf("%c - %d\n", alp[i], (int)(alp[i])); } char str[100]; gets(str); puts(str); printf("%d", (int)(str[0])); }` вот код. при вводе символ б, выводится -95, хотя только что числу б соответствовало -31

    – Kyteraade Oct 14 '23 at 19:28
  • Подождите, вы пишете "Проверяю в конце кода какому числу соответствуют *те же буквы" — но вы же проверяете совсем другие*! Я вас понял так, что у вас в alp сначала одни коды, потом другие. А сравнивать мягкое с теплым... Разные кодировки, что вы хотите... – Harry Oct 14 '23 at 19:51
  • т.е вы хотите сказать, что буква б в строке с алфавитом и буква б, которую я ввожу потом в консоли это разные буквы? а почему так происходит, почему у них кодировки разные? – Kyteraade Oct 14 '23 at 19:53
  • Когда вы сохраняете файл с исходным кодом программы, текстовый редактор, встречая символ б, пишет в файл байт со значением -31. Когда вы вводите в консоли символ б, она отправляет в поток ввода вашей программы байт со значением -95. Так сложилось исторически. – wololo Oct 14 '23 at 20:10

0 Answers0