Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
ampermetr
23 / 23 / 9
Регистрация: 01.05.2015
Сообщений: 178
#1

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

27.05.2015, 09:52. Просмотров 225. Ответов 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 и ДВА символа. Программа выводит на экран последовательно символ №1 и символ - C++
Пользователь вводит целое число n и ДВА символа. Программа выводит на экран последовательно символ №1 и символ №2 n-раз. ...

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

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

Дана строка А и символ s. Удалить из строки символы, размещенные в символа s - C++
Дана строка А и символ s. Удалить из строки символы, размещенные до символа s. как при с помощью string это сделать, помогите пожалуйста.

Заменить все вхождения первого символа в массив на второй символ - C++
Задан символьный массив и два символа. Замените все вхождения первого символа в массив на второй символ. Нужно до пятницы. Заранее спасибо.

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

4
Croessmah
Пришел
Эксперт CЭксперт С++
13761 / 7842 / 893
Регистрация: 27.09.2012
Сообщений: 19,254
Записей в блоге: 3
Завершенные тесты: 1
27.05.2015, 10:04 #2
C++
1
2
3
cin >> z;
if (z=='n')
   break
0
nmcf
5770 / 5081 / 1735
Регистрация: 14.04.2014
Сообщений: 20,793
27.05.2015, 10:20 #3
Это Linux?
0
ampermetr
23 / 23 / 9
Регистрация: 01.05.2015
Сообщений: 178
27.05.2015, 13:05  [ТС] #4
Croessmah, эту конструкцию запихал в бесконечный цикл и все работает, спасибо
nmcf, да
Осталось решить вопрос про кириллицу))
0
Croessmah
Пришел
Эксперт CЭксперт С++
13761 / 7842 / 893
Регистрация: 27.09.2012
Сообщений: 19,254
Записей в блоге: 3
Завершенные тесты: 1
27.05.2015, 13:41 #5
Лучший ответ Сообщение было отмечено автором темы, экспертом или модератором как ответ
Например, перейти на широкие символы и указать локаль:
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
Привет! Вот еще темы с ответами:

Считать строку из файла и найти позицию заданного символа (непонятный символ в строке) - C++
Есть у меня вот такая вот строка 181x77х1 Лежит в файле. Я ее считываю и хочу найти позицию символа 'x' не получается. ...

Как скопировать подстроку из строки до определенного символа? Или удалить, начиная с этого символа - C++
Добрый вечер. Ответ искал, но не нашёл. Предположим, есть строка: ABC|DEF Надо скопировать всё до | , т.е., в приведённом...

В строке заменить каждый символ * числом, соответствующим номеру вхождения этого символа в строку - C++
в заданной строке заменить каждый символ &quot;*&quot; числом, соответствующим номеру по порядку вхождения этого символа в строку #include...

Разработать рекурсивную функцию, которая после каждого вхождения символа a в строку s добавляет символ b - C++
На уроке преподаватель не объясняет как решать. Задачи берутся из &quot;Основы программирования на языке С++&quot; часть 2 Огнева М.В., Кудрина Е.В....


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

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

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