Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/6: Рейтинг темы: голосов - 6, средняя оценка - 5.00
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 4
1

Пропускает cin в цикле

14.04.2021, 14:41. Показов 1127. Ответов 3
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
в цикле на вывод массива строк пропускает cin и просто пролетает цикл без возможности вписать ответ
Что делать?

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
void Test1()
{
    system("cls");
    cursorPos = { 35,0 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "Тест на самооценку";
    cursorPos = { 1,2 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "Каждое утверждение нужно оценить от 0 до 4";
    cursorPos = { 2,3 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "очень часто - 4 ";
    cursorPos = { 2,4 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "часто - 3 ";
    cursorPos = { 2,5 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "иногда - 2 ";
    cursorPos = { 2,6 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "редко - 1 ";
    cursorPos = { 2,7 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "никогда - 0 ";
    cursorPos = { 35 ,10 };
    SetConsoleCursorPosition(hStdOut, cursorPos);
    cout << "Начать";
    while (1) // ждем ентер 
    {
        char ch = _getch();
        if (ch == 13) {
            system("cls");
            int s = 0;
            int ans[10];
            int a;
            
            for (int i = 0; i < 10; i++) {
                cursorPos = { 2,2 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << Test1Text[i];
                cursorPos = { 3,7 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Ответ:"<<endl;
                
                cin >> ans[i];                  \\ЗДЕСЬ
                
                s += ans[i];
                system("cls");
            }
            system("cls"); // чистим консоль 
            cursorPos = { 35,1 };
            SetConsoleCursorPosition(hStdOut, cursorPos);
            cout << "Тест пройден";
            if ((s >= 0) && (s <= 14)) {
                SetConsoleTextAttribute(hStdOut, green);
                cursorPos = { 1,3 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Высокий уровень самооценки.";
                SetConsoleTextAttribute(hStdOut, woкkWindowAttributes);
                cursorPos = { 0,5 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Ты не расстраиваешься из-за замечания других и редко сомневаешься в своих действиях.";
            }
            if ((s >= 15) && (s <= 27)) {
                SetConsoleTextAttribute(hStdOut, blue);
                cursorPos = { 1,3 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Cредний уровень самооценки. ";
                SetConsoleTextAttribute(hStdOut, woкkWindowAttributes);
                cursorPos = { 0,5 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Ты редко страдаешь от «комплекса неполноценности» и иногда пытаешься подстроиться под     мнение других.";
            }
            if ((s >= 28) && (s <= 40)) {
                SetConsoleTextAttribute(hStdOut, red);
                cursorPos = { 1,3 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Низкий уровень самооценки.";
                SetConsoleTextAttribute(hStdOut, woкkWindowAttributes);
                cursorPos = { 0,5 };
                SetConsoleCursorPosition(hStdOut, cursorPos);
                cout << "Ты болезненно воспринимаешь критические замечания, пытаешься всегда считаться с мнениями других и страдаешь от «комплекса неполноценности».";
 
            }
            cursorPos = { 10,10 };
        SetConsoleCursorPosition(hStdOut, cursorPos);
        cout << "Меню";
        while (1)
            {
                char ch = _getch();
                if (ch == 13) // ждем ентер 
                {
                    system("cls"); // чистим консоль 
                    DrawMenu(); // переходим в меню
                }
            }
        }
        else {
            system("cls"); // чистим консоль
            DrawMenu(); // перходим в меню
        }
    }
}
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.04.2021, 14:41
Ответы с готовыми решениями:

Как работает cin.good() и cin.clear() в цикле do while
Как сделать так, чтобы после неправильного ввода цикл продолжал работать? В данной реализации...

Пропускает cin
#include &lt;iostream&gt; #include &lt;cstdlib&gt; #include &lt;stdio.h&gt; #include &lt;cstring&gt; #include &lt;fstream&gt;...

Программа пропускает cin >>
Программа состоит из 2 частей. В 1 ввод имени и числа, например &quot;anna 6&quot;, выйти из цикла можно...

Программа пропускает cin
Уже несколько раз сталкивался с проблемами функции &quot;cin&quot; по задумке, в моей программе, он должен...

3
Модератор
Эксперт С++
13507 / 10757 / 6412
Регистрация: 18.12.2011
Сообщений: 28,713
14.04.2021, 15:38 2
Цитата Сообщение от vlada222223 Посмотреть сообщение
char ch = _getch();
Цитата Сообщение от vlada222223 Посмотреть сообщение
cin >> ans[i]; \\ЗДЕСЬ
Наложение низкоуровневого ввода и поточного дает непредсказуемые результаты.
Хотя вот такой код, вроде бы, читает массив правильно
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
#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
    cout << "press enter to start:";
    while (1) // ждем ентер 
    {
        char ch = _getch();
        if (ch == 13) 
        {
            int s = 0;
            int ans[4];
            system("cls");
            for (int i = 0; i < 4; i++) {
                cin >> ans[i]; 
                s += ans[i];
                system("cls");
            }
            for (int i = 0; i < 4; i++)
                cout<<ans[i]<<' ';
        }
    }
    return 0;
}
Но я все-таки советую избавиться от conio.h:
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 <conio.h>
#include <windows.h>
using namespace std;
int main()
{
    cout << "press enter to start:";
    while (1) // ждем ентер 
    {
        char ch = cin.get();
        if (ch == '\n') 
        {
            int s = 0;
            const int N=4;
            int ans[N];
            system("cls");
            for (int i = 0; i < N; i++) {
                cin >> ans[i]; 
                cin.get();
                s += ans[i];
                system("cls");
            }
            for (int i = 0; i < N; i++)
                cout<<ans[i]<<' ';
 
        }
        cout << "\npress enter to continue:";
    }
    return 0;
}
0
0 / 0 / 0
Регистрация: 14.04.2021
Сообщений: 4
14.04.2021, 15:42  [ТС] 3
getch() же считывает символ с клавиатуры или я что-то не понимаю?
0
зомбяк
1584 / 1218 / 345
Регистрация: 14.05.2017
Сообщений: 3,939
14.04.2021, 16:38 4
Функции _getch и _getwch считывают один символ из консоли без вывода символа. Эти функции нельзя использовать для считывания сочетания CTRL+C. При считывании функциональной клавиши или клавиши со стрелкой каждая из этих функций должна вызываться дважды. Первый вызов возвращает 0 или 0xE0, а второй вызов возвращает фактический код клавиши.
(https://docs.microsoft.com/ru-... om=vs-2019)
0
14.04.2021, 16:38
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.04.2021, 16:38
Помогаю со студенческими работами здесь

Пропускает первый cin
что делать если пропускает первый cin? Без возможности ввести в первую строку, сразу же начинает...

Компилятор не видит cin и пропускает
Доброго времени суток. Выполняю 7 задание в 8 главе у Страуструпа. Я написал комментарий возле того...

Пропускает поток ввода cin
Решал задачку из книжки Страуструпа. В общей сложности решил. Но столкнулся с проблемой, после...

Компилятор пропускает строку с std::cin
Есть код: #include &quot;stdafx.h&quot; int readNumber() { std::cout &lt;&lt; &quot;Введите число: &quot;; int...

Останавливается цикл и иногда пропускает второй cin
Проблема в названии темы. Программа должна класть в переменную slovo все буквы из s1, но доходит до...

При вводе данных программа пропускает операции cin
Описать структуру с именем note, содержащую следующие поля:  фамилия, имя;  номер...


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

Или воспользуйтесь поиском по форуму:
4
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru