Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
ampermetr
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 180
#1

Символ кириллицы распознается как 2 символа - C++

27.05.2015, 09:52. Просмотров 253. Ответов 4
Метки нет (Все метки)

В цикле do while при вводе символа латиницы все работает нормально, а ввод символа кириллицы запускает цикл 2 раза. Так ведь не должно быть?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
do
        {
        cin >> z;
        cout << "Ход игрока\n";
            a = rand()%6+1;
            b = rand()%6+1;
        cout << a << '\n' << b << '\n' << "Ход компьютера\n";
            c = rand()%6+1;
            d = rand()%6+1;
        cout << c << '\n' << d << '\n';       
        }
    while (z!='n');
    cout << "\nGame over!\n";
И еще вопрос - как вывести считывание z за пределы цикла? Чтобы при вводе 'n' цикл прерывался, а не как сейчас запускался еще один раз и прерывался?

Код целиком
Кликните здесь для просмотра всего текста

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
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
 /// Игра в кости
 
#include <iostream>
#include <cstring>
#include <locale>
#include <cmath>
#include <cstdlib>
#include <ncurses.h>
#include <vector>
#include <iterator>
 
using namespace std;
//using std::cout;
//using std::cin;
//using std::endl;
 
int a, b, c, d, q, sumA = 0, sumB = 0;
char z;
vector<int> myVector;
 
int Start()
{
   cout << "\n" << "Если первым ходит игрок - введите 1, если первым ходит компьютер - введите 0"<< endl;
   cin >> q;
   return 0;
}
 
void Step() ///если первый ход компьютера
{
    do
        {
        cin >> z;
        cout << "Ход компьютера\n";
            a = rand()%6+1;
            b = rand()%6+1;
        cout << a << '\n' << b << '\n' << "Ход игрока\n";
            c = rand()%6+1;
            d = rand()%6+1;
        cout << c << '\n' << d << '\n';
        if (a+b > c+d)
            {
                cout << "Выиграл компьютер!" << endl;
                sumA++;
                myVector.insert (myVector.end(), 0); ///запись результата в вектор
            }
        else if (a+b < c+d)
            {
                cout << "Выиграл игрок!" << endl;
                sumB++;
                myVector.insert (myVector.end(), 1);
            }
        else cout << "Ничья" << endl;
        cout << "Продолжить?" << endl;
        }
    while (z!='n');
    cout << "\nGame over!\n";
    cout << "Итого:компьютер: " << sumA << endl;
    cout << "Итого:игрок: " << sumB << endl;
    if (sumA > sumB)
        cout << "Победа компьютера" << endl;
    else if (sumA < sumB)
        cout << "Победа игрока" << endl;
    else cout << "Ничья" << endl;
}
 
void Step1()
{
    do
        {
        cin >> z;
        cout << "Ход игрока\n";
            a = rand()%6+1;
            b = rand()%6+1;
        cout << a << '\n' << b << '\n' << "Ход компьютера\n";
            c = rand()%6+1;
            d = rand()%6+1;
        cout << c << '\n' << d << '\n';
        if (a+b > c+d)
            {
                cout << "Выиграл игрок!" << endl;
                sumA++;
                myVector.insert (myVector.end(), 1);
            }
        else if (a+b < c+d)
            {
                cout << "Выиграл компьютер!" << endl;
                sumB++;
                myVector.insert (myVector.end(), 0);
            }
        else cout << "Ничья" << endl;
        cout << "Продолжить?" << endl;
 
        }
    while (z!='n');
    cout << "\nGame over!\n";
    cout << "Итого:игрок: " << sumA << endl;
    cout << "Итого:компьютер: " << sumB << endl;
    if (sumA > sumB)
        cout << "Победа игрока" << endl;
    else if (sumA < sumB)
        cout << "Победа компьютера" << endl;
    else cout << "Ничья" << endl;
}
 
 
int main()
{
 
    Start();
    if (q == 0)
    {
        cout << "Поехали\n";
        Step();
    }
    else if (q == 1)
    {
        cout << "Поехали\n";
        Step1();
    }
    else cout << "Error!\n";
    for (int i (0); i < myVector.size(); i++) ///вывод результатов по каждой партии
    {
        if (myVector[i] == 1)
        {
            cout << "В игре № " << i << " победил игрок." << endl;
        }
        else cout << "В игре № " << i << " победил компьютер." << endl;
    }
    //copy (myVector.begin(), myVector.end(), ostream_iterator<int>(cout, " ")); ///проверка
    //system("clear");
return 0;
}
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2015, 09:52
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Символ кириллицы распознается как 2 символа (C++):

Заменить каждый символ массива встречающийся после первого вхождения символа * на символ -
Даны натуральное число n, символы s1,…,sn. Преобразовать последовательность...

Пользователь вводит целое число n и ДВА символа. Программа выводит на экран последовательно символ №1 и символ
Пользователь вводит целое число n и ДВА символа. Программа выводит на экран...

Ошибка (записывается код символа, а не сам символ)
есть строка символов (принял из EditBox) CString str; const char *strС; ...

Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S
Ребят , можете обьяснить эту задачу . Как-то туго понимаю . Пожалуйста . Не...

В данной строке S вставить символ c1 после каждого вхождения символа c2
В данной строке S вставить символ c1 после каждого вхождения символа c2.

Дан символ С и строка S. Подсчитать количество вхождений символа C в строку S
ребята выручайте плиззз

4
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,921
Записей в блоге: 3
Завершенные тесты: 1
27.05.2015, 10:04 #2
C++
1
2
3
cin >> z;
if (z=='n')
   break
0
nmcf
6239 / 5551 / 2526
Регистрация: 14.04.2014
Сообщений: 23,342
27.05.2015, 10:20 #3
Это Linux?
0
ampermetr
23 / 23 / 14
Регистрация: 01.05.2015
Сообщений: 180
27.05.2015, 13:05  [ТС] #4
Croessmah, эту конструкцию запихал в бесконечный цикл и все работает, спасибо
nmcf, да
Осталось решить вопрос про кириллицу))
0
Croessmah
++Ͻ
14158 / 8083 / 1513
Регистрация: 27.09.2012
Сообщений: 19,921
Записей в блоге: 3
Завершенные тесты: 1
27.05.2015, 13:41 #5
Лучший ответ Сообщение было отмечено ampermetr как решение

Решение

Например, перейти на широкие символы и указать локаль:
C++
1
2
3
4
5
6
7
8
9
    std::locale::global ( std::locale("ru_RU.UTF-8") ) ;
    wchar_t z ;
    while(true)
    {
        std::wcin >> z ;
        if ( z==L'n' )
            break ;
        std::wcout << L"Считали символ\n";
    }
1
27.05.2015, 13:41
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
27.05.2015, 13:41
Привет! Вот еще темы с решениями:

Дана строка А и символ s. Удалить из строки символы, размещенные в символа s
Дана строка А и символ s. Удалить из строки символы, размещенные до символа s....

Дан символ C и строка S .Удвоить каждое вхождение символа С в строку S
Обработка символьных массивов с помощью указателей: Дан символ C и строка S...

Заменить все вхождения первого символа в массив на второй символ
Задан символьный массив и два символа. Замените все вхождения первого символа в...

Дан символ С и строки S, S0. После каждого вхождения символа С в строку S вставить S0
Дан символ С и строки S, S0. После каждого вхождения символа С в строку S...


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

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

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