Как здесь убрать иероглифы?

Экспериментировал с вызовом функций и выводом текста. Столкнулся вот с этим:

от такого кода

#include <iostream> 
#include <string>
using namespace std;

int imya_faila()
{
setlocale (0, " ");
string file_name;
cin >> file_name;
cout << "Имя файла: " << file_name << endl;
return 0;
}
int main()
{

cout << imya_faila() << endl;

system ("pause");

return 0;
}

выводит сначала иероглифы, а потом текст на русском который вводился в консоли,
а если так

#include <iostream> 
#include <string>
using namespace std;

int imya_faila()
{
setlocale (LC_ALL, "Russian");
string file_name;
cin >> file_name;
cout << "Имя файла: " << file_name << endl;
return 0;
}
int main()
{

cout << imya_faila() << endl;

system ("pause");

return 0;
}

то сначала выводит текст «Имя файла », а потом иероглифы вместо вводимого текста.

Почему так получается?
Использую Visual Studio 2010 Express.

Существуют разные кодовые страницы (code page — СР) для национальных алфавитов. Для кирилицы в Windows используется СР 1251, а в командной строке СР 866. Почему так — прочитай в статье
Символы кириллицы в консоли Windows
Соответственно в первой записи у тебя подключается СР 866 и корректно отображаются символы введенные в командной строке. Во втором случае СР 1251 и корректно отображаются символы введённые в Windows (в программе Visual Studio). Причём в первом случае достаточно просто стереть пробел между кавычками, чтобы подключилась CP 1251. Чтобы не запутаться можно запомнить номера кодовых страниц и подключать их явно:

setlocale(0, ".1251");
cout  <<  "Имя файла: ";
setlocale(0, ".866");
cout << file_name << endl;

Внимание! Это довольно старый топик, посты в него не попадут в новые, и их никто не увидит. Пишите пост, если хотите просто дополнить топик, а чтобы задать новый вопрос — начните новый.

Ответить

Вы можете использовать разметку markdown для оформления комментариев и постов. Используйте функцию предпросмотра для проверки корректности разметки.

Пожалуйста, оформляйте исходный код в соответствии с правилами разметки. Для того, чтобы вставить код в комментарий, скопируйте его в текстовое поле ниже, после чего выделите то, что скопировали и нажмите кнопку «код» в панели инструментов. Иначе ваш код может принять нечитаемый вид.

Либо производите оформление кода вручную, следующим образом:

``` #include <iostream> using namespace std; int main() { // ... } ```

Предпросмотр сообщения

Ваше сообщение пусто.