Форум программистов, компьютерный форум, киберфорум
C для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/15: Рейтинг темы: голосов - 15, средняя оценка - 5.00
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
1

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

20.10.2018, 18:53. Просмотров 3093. Ответов 19
Метки нет (Все метки)

Здравствуйте, начал работать со строками и при выводе мне пишет непонятные иероглифы, пример в скрине:
При вводе русских букв пишет какие-то непонятные иероглифы, что делать?
вот, собственно код:

C
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <stdlib.h>
#include <stdio.h>
#include <string.h>
#include <locale.h>
char main()
{
    setlocale(LC_ALL, "RUS");
    char s[100];
    printf("Введите строку:> ");
    gets(s);
    printf("%s",s);
    getchar();
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.10.2018, 18:53
Ответы с готовыми решениями:

Непонятные символы (иероглифы) вместо русских букв
Как исправить иероглифы

Почему при копировании из Matcad 15 в Word вместо русских букв получаются какие-то "каракули" - непонятные символы вместо букв
Я пользуюсь Matcad 15. Почему при копировании набранного текста из рабочей области Matcad 15 в...

Сделать контроль русских букв при вводе в игре
import random MAX_ERRORS = 8 words_list = def show_list_as_word(arg): ...

При создании таблицы из Lazarus в Excel вместо русских букв пишет ?
procedure TForm1.ButtonOtchetClick(Sender: TObject); var wss: String; ExcelApp, Workbook,...

19
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
20.10.2018, 18:55 2
ну как бы.. седой баян однако, удостоившийся собственной темы на форуме:

Русские шрифты в консоли
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
20.10.2018, 19:06  [ТС] 3
Увы там на си, я новичок пока в этом деле и не понимаю как перевести из СИ++ в СИ, можно пожалуйста часть кода.
0
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
20.10.2018, 19:25 4
Вообще для русских букв в консоли есть одно 100% проверенное решение, но оно вам не понравится.
0
Миниатюры
При вводе русских букв пишет какие-то непонятные иероглифы, что делать?  
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
20.10.2018, 19:49 5
там разница между с и с++ на уровне

printf() - это cout
scanf() - это cin

остальное все то же самое

Добавлено через 20 минут
В общем, что я еще могу посоветовать..

1. Ввод русского языка
2. Программа выводит ?N=0.68. а должна ΔN=0.69. в чем у меня ошибка?
3. активный поиск по форуму, гуглу и т.д. такие вопросы возникают у новичков примерно раз в неделю, так что и информации по способам решения море.. в чем собственно и проблема, отфильтровать это море и найти в нем крупицу истины бывает не так-то просто..
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
20.10.2018, 20:09 6
Я стал работать в Dev C++, что и решило проблему.
http://kpolyakov.spb.ru/school/c/faq.htm#rus
0
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
20.10.2018, 20:12 7
Поздравляю

Добавлено через 2 минуты
Только пометьте тему как решенную. Например, измените название на:
[РЕШЕНО] При вводе русских букв пишет какие-то непонятные иероглифы, что делать?
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
20.10.2018, 20:43 8
stake-k26, Вы меня перепутали с Lepricon228
0
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
21.10.2018, 06:28 9
number_118, Да? Действительно, извиняюсь.
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
21.10.2018, 14:35  [ТС] 10
Доселе не решено, ответа нет, изменения в Dev c++ не пашут, windows h и его сет консоли тоже, locale тоже не работает, точнее как последний работает но не на вывод ввода.
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
22.10.2018, 20:32 11
Lepricon228, только вариант с Dev C++ мне помог, setlocale и т.п. стало выводить русское, но не распознавало русское (если быть точным, то была такая задача на switch):
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <stdio.h>
int main()
{
char c;
printf("\nВведите первую букву:");
scanf("%c", &c); // ввести букву
switch ( c ) // заголовок оператора выбора
 {
 case 'а': printf("\nАнтилопа"); break;
 case 'б': printf("\nБарсук"); break;
 case 'в': printf("\nВолк"); break;
 default: printf("\nНе знаю я таких!"); // по умолчанию
 }
getchar(); 
return 1;
}
Вообще, отключите в Compiler Options пункт "Add the following commands". Убедитесь, что выполнили сказанное по ссылке (я делал вариант два): http://kpolyakov.spb.ru/school/c/faq.htm#rus Должно помочь, в крайнем случае, напишите Константину.
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
23.10.2018, 07:37  [ТС] 12
Факт в том что я не хочу русифицировать компилятор, смысл от этого если у меня русский будет а у другого компилятора опять иероглифы, или это проблема только Code Block и Dev C++, работаю только на них.
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
01.11.2018, 21:26 13
Lepricon228,
Факт в том что я не хочу русифицировать компилятор, смысл от этого если у меня русский будет а у другого компилятора опять иероглифы, или это проблема только Code Block и Dev C++, работаю только на них.
Специально ради Вас сегодня попробовал запустить один из своих exe-ников на чужой машине - всё работает адекватно. Так что наслаждаться бы Вам использованием правильно установленного Dev C++...

Хотел было прикрепить exe-ник, но так просто он не прикрепляется из-за формата.
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
01.11.2018, 22:27  [ТС] 14
Я попробывал сделал в код блоке, пошел в кодблок на ноуте, и там всё сломалось. хм...
0
6 / 6 / 1
Регистрация: 28.09.2018
Сообщений: 396
01.11.2018, 22:54 15
Lepricon228, ну так я же пользуюсь Dev C++, а не CodeBlocks...
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 09:09  [ТС] 16
Ну дык что, ответа нет?)
0
1368 / 807 / 536
Регистрация: 25.04.2016
Сообщений: 2,222
03.11.2018, 13:10 17
Как-то ученик спросил учителя: "А долго ждать перемен к лучшему?"
"Если ждать, то долго",- ответил учитель.

Lepricon228, а должен быть? Вам уже кучу ответов дали, но если вы сами не хотите найти среди них тот самый, который заработает у вас (для чего придется проверить все предложенные решения, коих порядка 1000), то ... Ждите дальше.
1
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
03.11.2018, 13:12  [ТС] 18
Я попробывал все варианты которые дали, ни один из них не работает((
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
10898 / 6814 / 1623
Регистрация: 25.07.2009
Сообщений: 12,519
03.11.2018, 17:45 19
Настройки локали - это для вменяемых POSIX совместимых ОС. В виндовсе или редактор настроить, чтобы он в cp866 файлы сохранял, или в программе строки перекодировать
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <Windows.h>
 
int main(void) {
    char ask[] = "Звать тебя как? ";
    char greet[] = "Ну привет тебе, ";
    char answ[256];
    
    CharToOemA(ask, ask);
    printf("%s", ask);
    scanf("%255s", answ);
    
    CharToOemA(greet, greet);
    printf("%s %s\n", greet, answ);
    
    return 0;
}
При вводе русских букв пишет какие-то непонятные иероглифы, что делать?

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <stdio.h>
#include <Windows.h>
 
#define ANIMALS_COUNT 4
 
int main(void) {
    char animals[ANIMALS_COUNT][64] = {
        "Антилопа",
        "Барсук",
        "Волк",
        "Непонятная зверушка"
    };
    char ask[] = "Введите первую букву: ";
    char answ;
    int i;
    
    for ( i = 0; i < ANIMALS_COUNT; ++i )
        CharToOemA(animals[i], animals[i]);
    CharToOemA(ask, ask);
    
    printf("%s", ask);
    scanf("%c", &answ);
    OemToCharBuffA(&answ, &answ, 1);
    
    switch ( answ ) {
        case 'а' :
            i = 0;
            break;
        case 'б' :
            i = 1;
            break;
        case 'в' :
            i = 2;
            break;
        default :
            i = 3;
            break;
    }
    printf("%s\n", animals[i]);
    
    return 0;
}
При вводе русских букв пишет какие-то непонятные иероглифы, что делать?


Ходят слухи, что в win 10 таки сподобились сделать консоль unicode, но проверить сейчас не на чем.
0
1 / 1 / 0
Регистрация: 15.10.2018
Сообщений: 89
24.03.2019, 15:12  [ТС] 20
Ответ прост, для того чтоб вводить и выводить русские буквы в и из консоли, надо:
C++
1
2
3
4
5
6
7
#include <windows.h>
 
int main()
{
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
}
А для того чтоб это работало, в самой консоли, надо нажать ПКМ по её рамке, выбрать свойства, выбрать шрифт Lucida Console или Consolas , и все)
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.03.2019, 15:12

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

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

Иероглифы вместо русских букв
Как сделать в С что бы вместо иероглифов были русские буквы

Вместо русских букв иероглифы
После отправки формы с сайта, вместо русских букв в БД кракозябры. Соответственно и на сайт...

Вместо русских букв иероглифы
Сделал консольное приложение, а вместо русских букв - иероглифы, как это исправить?


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Опции темы

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