Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.86/65: Рейтинг темы: голосов - 65, средняя оценка - 4.86
10 / 10 / 6
Регистрация: 19.01.2012
Сообщений: 195
Записей в блоге: 2
1

Вывести символы мастей карт в консоль

20.11.2016, 00:17. Показов 12599. Ответов 12
Метки нет (Все метки)

Всем добрый день. Задача решена, осталось вывести символы карт в консоль?
Что в программе:
C++
1
2
3
4
#include "Windows.h"
 
SetConsoleCP(1251);
SetConsoleOutputCP(1251);
И шрифт в консоли Lucida Console. Почему именно это? Это единственный набор(который я нашёл, если подскажете лучше, я буду только за), при котором выводятся и вводятся русские символы корректно. То есть: ввод в стринг, вывод этого стринг, вывод сообщений, вывод в файл, показ файла. Все корректно с русскими символами.
Теперь к проблеме: я пробовал многими способами, к примеру:
C++
1
2
3
printf("\x3 ");
или
cout<<"\x03"<<" ";
Но в консоль выводится некорректное значение(квадратик пустой). Подскажите пожалуйста выход! Заранее спасибо.
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.11.2016, 00:17
Ответы с готовыми решениями:

Не выводятся в консоль символы мастей карт в системе Windows
Здравствуйте! Хочу вывести в консоль символы мастей карт. Но в итоге имею вопросительный знак. ...

Вывод мастей карт через ASCII
Здравствуйте, имеется такой код: // Random_cards.cpp: определяет точку входа для консольного...

Вывести русские символы в консоль
написал программу в Visual Studio 2015. При выводе std::cout&lt;&lt;&quot;привет&quot;; на консоль выводятся какие...

Решить физическое уравнение и вывести символы на консоль
&quot;Машина стартует с нулевой скоростью и ускорением 1м/с2. Ускоряется до 10 м/с. Выводить каждую...

12
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
20.11.2016, 09:21 2
Lagos,

добавь в начало main: setlocale(LC_ALL, "rus");

убедись что файл, в котором ты пишешь исходных код, имеет кодировку .1251 (в студии этот шаг мне не нужен был, в Qt с Uft-8 надо было сменить).

вывод через поток: cout << "Мой текст" << endl;

Проверь: обычный вывод в консоль (как выше написал), вывод из файла на консоль, ввод значения в файл и вывод его на консоль. И отпишись здесь.
0
10 / 10 / 6
Регистрация: 19.01.2012
Сообщений: 195
Записей в блоге: 2
20.11.2016, 14:15  [ТС] 3
ВОт код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void zad_3();
 
int main()
{
    setlocale(LC_ALL, "Russian");
    zad_3();
    return 0;
}
 
void zad_3()
{
    ofstream test_f("Z:/programming/c_plus_uroki/file_isxod/test.txt");
    string j, j_1; getline(cin, j);
    test_f << j;
    test_f.close();
    ifstream test_o("Z:/programming/c_plus_uroki/file_isxod/test.txt");
    getline(test_o, j_1, '\0');
        test_o.close();
    cout << j_1 << endl;
    cout << j << endl;
}
Используются предварительно скомпилированные заголовки. Всё остальное там.
Вывод на экран в скриншоте. Кодировка тоже.
Миниатюры
Вывести символы мастей карт в консоль   Вывести символы мастей карт в консоль  
0
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
20.11.2016, 15:46 4
Lagos, также для считывания с консоли используй потоки:

C++
1
2
string myString = "";
cin >> myString;
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
/*
 
  Вывод в файл
 
*/
 
#include <iostream>
#include <fstream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    setlocale(LC_ALL, "rus");
 
    ofstream foutput("test.txt");
 
    foutput << "Работа с файлами в С++";
    foutput.close();
 
    string buffer = "";
    ifstream finput("test.txt");
 
    getline(finput, buffer);
 
    cout << buffer << endl;
    finput.close();
 
    return 0;
}
0
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
20.11.2016, 16:15 5
Lagos, выше пост можно не считать, затупил да. Бывает. Можно удалить...

Вот реализация. Да, шрифт нужно менять.

Кликните здесь для просмотра всего текста
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
/*
 
  Вывод в файл
 
*/
 
#include <iostream>
#include <fstream>
 
#include <windows.h>
 
using namespace std;
 
int main(int argc, char *argv[])
{
    SetConsoleOutputCP(1251);
    SetConsoleCP(1251);
 
    string buffer = "";
 
    ofstream foutput("test.txt");
 
    getline(cin, buffer);
    cout << buffer << endl;
 
    foutput << buffer;
    foutput.close();
 
    ifstream finput("test.txt");
 
    getline(finput, buffer);
 
    cout << buffer << endl;
    finput.close();
 
    cout << "NO: это конец!" << endl;
 
    system("pause");
 
    return 0;
}


Вот источник откуда можно почитать про все это

и целая методичка есть

ЛОКАЛИЗАЦИЯ КОНСОЛЬНЫХ ПРИЛОЖЕНИЙ В ЯЗЫКЕ C++.pdf
0
10 / 10 / 6
Регистрация: 19.01.2012
Сообщений: 195
Записей в блоге: 2
20.11.2016, 19:51  [ТС] 6
Посмотрите, в первом посте я так и делаю
Дело в том, что у меня символы мастей не выводятся...
например \x03
0
53 / 53 / 19
Регистрация: 09.12.2015
Сообщений: 215
21.11.2016, 01:43 7
Lagos, вот тут очень подробно расписали. Как будет время рассмотреть, то отпишусь.
0
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
21.11.2016, 13:30 8
Ни в 1251, ни в 866 нет символов мастей, они воспроизводились древними видеоадаптерами вместо спец. кодов ASCII. В древних "точечных шрифтах" консоли это учтено, а Lucida Console - юникодный шрифт, в нём есть масти, но не в области ASCII: "\u2665\u2666\u2663\u2660".
1
Форумчанин
Эксперт CЭксперт С++
8171 / 5021 / 1436
Регистрация: 29.11.2010
Сообщений: 13,453
21.11.2016, 14:00 9
Цитата Сообщение от Lagos Посмотреть сообщение
Почему именно это?
Потому что символы "мастей" не входят в стандартный набор ASCII. Поэтому надо искать эти коды в какой-нибудь кодировке, где они есть, например юникодной. И вывод символов в консоли должен поддерживать данную кодировку, поэтому Lucida Console.
0
10 / 10 / 6
Регистрация: 19.01.2012
Сообщений: 195
Записей в блоге: 2
21.11.2016, 23:28  [ТС] 10
Ghost Writter
Увы, Ваша ссылка не открылась:с
nmcf
Можно немного поподробнее? Сложно совладать с этими кодировками...Вот Вы привели код. Как мне вывести символ по этомоу коду. Я уже попробовал многими способами, но у меня не вышло. Было бы неплохо подсказать. Извиняюсь за небольшую тупость, спасибо
1
7158 / 6133 / 2801
Регистрация: 14.04.2014
Сообщений: 26,455
22.11.2016, 10:15 11
Лучший ответ Сообщение было отмечено L0M как решение

Решение

Если у тебя VS, то так:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "io.h"
#include "fcntl.h"
 
int main()
{
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
 
    std::wcout << L"\u2665\u2666\u2663\u2660\u30A8\n";
 
    system("pause");
}
Ну и соответственно весь ввод/вывод должен быть на wcin/wcout.
3
10 / 10 / 6
Регистрация: 19.01.2012
Сообщений: 195
Записей в блоге: 2
23.11.2016, 03:00  [ТС] 12
Большое спасибо!

Добавлено через 2 часа 50 минут
Может кому-то пригодится. Полный вывод\ввод в переменную, с переменной, в файл, с файла, символа в Unicode:
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
43
44
45
46
47
48
49
50
51
52
53
#include "stdafx.h"
#include <iostream>
#include <string>
#include <fstream>
// Обязательно подключить эти два заголовка
#include <io.h>
#include <fcntl.h>
 
using namespace std;
 
int main() 
{
    // Задаем кодировку потоков ввода и вывода, unicode
    _setmode(_fileno(stdout), _O_U16TEXT);
    _setmode(_fileno(stdin), _O_U16TEXT);
    // Вывод символов Unicod
    wcout << L"Тест. \u2665\u2666\u2663\u2660 \n";
    // Ввод и вывод символа wchar_t
    wchar_t x;
    (wcin >> x).get(); // удаление entera из буффера
    wcout << x << endl;
    // Ввод и вывод переменной(getline(wcin,,), rus
    wstring g;
    getline(wcin, g);
    wcout << g << endl;
    // Ввод и вывод переменной(wcin), rus
    wcin >> g;
    wcout << g << endl;
    // Вывод из файла, rus
    wifstream output("C:/ini.txt");
    output.imbue(locale("rus_rus.1251")); // обязательно указать кодировку
    getline(output, g, L'\0');
    wcout << g << endl;
    output.close();
    // Ввод в файл и вывод, rus
    // Ввод
    wofstream input("C:/ini_test.txt");
    input.imbue(locale("rus_rus.1251")); // обязательно указать кодировку
    wcin.ignore(); // обязательно указать, ибо в строке 26 остаётся в буффере enter
    // а строка 41 читает до entera(если не указаны параметры). Поэтому, этот метод позволяет игнорировать 
    // этот ентер
    getline(wcin, g);
    input << g;
    input.close();
    // Вывод
    wifstream output_i("C:/ini_test.txt");
    output_i.imbue(locale("rus_rus.1251")); // обязательно указать кодировку
    getline(output_i, g, L'\0');
    wcout << g << endl;
    output_i.close();
 
    return 0;
}
Составил для себя, дабы выучить. Буду пересаживаться на это.
4
1 / 1 / 0
Регистрация: 03.05.2019
Сообщений: 65
21.05.2019, 20:08 13
как раз хочу написать карточную игру, пригодится. спасибо
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
21.05.2019, 20:08

Вывести в консоль символы *, разместив их в виде ёлочки
Помогите написать ёлочку такого формата: (высота задается пользователем, например 4) ( _ -типо...

Найти и вывести на консоль символы, наиболее часто встречающиеся в заданной строке
В тексте найти и напечатать символы, встречающиеся наиболее часто. Помогите !

DevCpp не вводятся спец символы (масти карт)
Для программы необходимо использование спец символов обозначающих масти карт: ♥ ♦...

Вывести все символы английского алфавита, чередуя строчные и прописные символы
Помогите решить задачу по программированию. Используя операторы цикла, вывести на экран все...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru