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

Различие функций setlocale() и SetConsoleCP()/SetConsoleOutputCP() - C++

Восстановить пароль Регистрация
Другие темы раздела
C++ Дано двумерный массив целых чисел. Все нечетные элементы заданного массива заменить суммой номеров их строки и столбца http://www.cyberforum.ru/cpp-beginners/thread907371.html
решил задачу думаю правильно все сделал. Если есть гдето ошибка скажитьте)))) #include<iostream> #include <conio.h> #include <cmath> #include <iomanip> #include <time.h> using namespace std; int main() { int n,m;
C++ run-time check failure #3-не запускаеться программулька Простая программка, проверяю-правельная. У друзей-работает, а у меня выдает "run-time check failure #3 the variable 'c' is being used without being initialized" Что может быть это? Вижуал Студию переставляла, не помогает( Вот собствено и код #include <iostream> using namespace std; void main() { int a,b,c; float d; http://www.cyberforum.ru/cpp-beginners/thread907370.html
C++ дописать ( Из массива А удалить все элементы, которые встречаются в В ровно 2 раза. Из В переписать в С те элементы, которые совпадают с оставшимися)
нужно чтоб на экран еще выводило перед новым массивом А, числа,которые повторяются в массиве В 2 раза. и перед С тоже чтоб выводило на экран числа,которые остались в старом массиве А. само задание было таково: 43. Вводятся массивы А и В. Из массива А удалить все элементы, которые встречаются в В ровно 2 раза. Из В переписать в С те элементы, которые совпадают с оставшимися в массиве А.на...
C++ Поменять местами столбцы матрицы
условие : В матрице из действительных чисел поменять местами последний столбец со столбцом, содержащим наибольшее по абсолютной величине элемент матрицы. #include <iostream> #include <stdio.h> #include <math.h> using namespace std; int main() {
C++ Перевод из Delphi в С++ http://www.cyberforum.ru/cpp-beginners/thread907318.html
Приветствую. Нужно перевести по указанному в названии темы направлении код. Премного благодарен! type TMyStrArr = array of string; function GetWordsBy1stWord(str: string): TMyStrArr; function WordsInStrA(s: string): integer; var b: boolean; i,j,k: integer;
C++ [Linker error] undefined reference to #include<string.h> #include<stdlib.h> #include<conio.h> #include<stdio.h> #include <math.h> #include<fstream> #include<iostream> using namespace std; подробнее

Показать сообщение отдельно
xlxndr
 Аватар для xlxndr
56 / 8 / 3
Регистрация: 14.06.2013
Сообщений: 115
20.06.2013, 01:58     Различие функций setlocale() и SetConsoleCP()/SetConsoleOutputCP()
Вопрос состоит в следующем... Можно проверить с помощью функций GetACP(), GetOEMCP(), GetConsoleCP(), GetConsoleOutputCP(), что функция setlocale НЕ МЕНЯЕТ НИКАКИХ КОДИРОВОК в потоках ввода/вывода. Однако, если использовать функцию SetConsoleOutputCP(1251) или SetConsoleCP(1251), то после них setlocale() не работает! Особенно удивительно относительно функции SetConsoleCP(1251), она то здесь при чем?!!! Она отвечает только за ввод, но не вывод символов на экран, поэтому портить, по идее, ничего не должна! ?

листинг - 1

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <windows.h>
using namespace std;
 
main()
{
//SetConsoleCP(1251);                //пока отключили
//SetConsoleOutputCP(1251);       //пока отключили
    setlocale(LC_ALL,"Rus");          //Устанавливаем кодировку???
                                
    cout<<GetACP()<<endl;                     //будет - 1251
    cout<<GetOEMCP()<<endl;                 //будет - 866
    cout<<GetConsoleCP()<<endl;            //будет - 866
    cout<<GetConsoleOutputCP()<<endl;   //будет - 866
    
    cout<<"Однако, выводим русские буквы"<<endl;
    cin.get();
}
листинг - 2

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <windows.h>
using namespace std;
 
main()
{
   SetConsoleCP(1251);                  //ВКЛЮЧИЛИ
//SetConsoleOutputCP(1251);       //пока отключили
    setlocale(LC_ALL,"Rus");          //Устанавливаем кодировку???
                                
    cout<<GetACP()<<endl;
    cout<<GetOEMCP()<<endl;
    cout<<GetConsoleCP()<<endl;                     //поменялась
    cout<<GetConsoleOutputCP()<<endl;  
    
    cout<<"Получили крокозябры, хотя в ВЫВОДЕ на консоль НИЧЕГО не меняли"<<endl;
    cin.get();
}
листинг-3

C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <iostream>
#include <windows.h>
using namespace std;
 
main()
{
    //SetConsoleCP(1251);                //пока отключили
      SetConsoleOutputCP(1251);         //ВКЛЮЧИЛИ
      setlocale(LC_ALL,"Rus");          //Устанавливаем кодировку???
                                
    cout<<GetACP()<<endl;
    cout<<GetOEMCP()<<endl;
    cout<<GetConsoleCP()<<endl;                
    cout<<GetConsoleOutputCP()<<endl;    //поменялась
    
    cout<<"Опять получили крокозябры, хотя в ВЫВОДЕ на консоль русская кодировка 1251"<<endl;
    cin.get();
}
Но вот если использовать SetConsoleOutputCP(866) или SetConsoleCP(866), то все работает нормально... Почему? Получается, если просто использовать SetConsoleOutputCP(1251) или SetConsoleCP(1251), то указываем русскую кодировку, а если setlocale, то кодировка консоли - и вывода, и что удивительно, даже ВВОДА, должно быть CP866.
Во-первых, почему CP866? Во-вторых, при чем тут функция изменения ввода SetConsoleCP(866), если мы ничего не вводим?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
Текущее время: 17:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru