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

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

Войти
Регистрация
Восстановить пароль
 
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
#1

Цикл не прерывается при вводе Enter - C++

27.05.2014, 10:16. Просмотров 1111. Ответов 34
Метки нет (Все метки)

Хотелось бы узнать почему цикл while не прерывается при введение enter. Переписал код всеми доступными мне способами. вроде бы нет ошибок но не работает.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <iostream>
#include <conio.h>
#include <vector>
int main()
{
    setlocale( LC_ALL, "Russian");
    std::vector<int> num;
    int a;
    char s = '\n';
std::cout << "Введите несколько чисел: \n";
while(std::cin >> a && a != s)
a % 2 != 0 ? num.push_back(a): num.push_back(a*2);
for(int r = 0; r < num.size(); r++)
    std::cout << r << " Элемент вектора: " << num[r] << std::endl;
_getch();
return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.05.2014, 10:16     Цикл не прерывается при вводе Enter
Посмотрите здесь:

Как сделать, чтобы при вводе в консоли <Enter> не переводил курсор на начало следующей строки? C++
C++ Составить программу, которая при вводе символа с клавиатуры выво-дит "латинская буква" при вводе латинской буквы и "не латинская бук-ва" во всех остал
c++ завершить цикл клавишей <Enter> C++
Как остановить цикл при вводе enter? C++
После первого scanf выводятся сразу все оставшиеся printf и цикл прерывается C++
C++ Ошибка с массивом: программа при вводе "ступорится" при нажатии клавиши Enter
C++ Бесконечный цикл с ожиданием нажатия enter
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Croessmah
Модератор
Эксперт CЭксперт С++
12675 / 7183 / 801
Регистрация: 27.09.2012
Сообщений: 17,709
Записей в блоге: 2
Завершенные тесты: 1
20.02.2016, 10:20     Цикл не прерывается при вводе Enter #21
НовыйНовичок, ентер нажали?
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
20.02.2016, 10:44     Цикл не прерывается при вводе Enter #22
Да нажимал, но и если сразу после 'c' нажать ctrl+z, тоже ведь не выходит.
Если это намек, то у меня мысли что может это из-за символа конца строки есть, но как это сделать, грамотно, такой цикл. Т.е. тут символ, а там строка.
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
20.02.2016, 12:26     Цикл не прерывается при вводе Enter #23
Английский символ 'c' вводишь?
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
20.02.2016, 15:12     Цикл не прерывается при вводе Enter #24
Это тоже проверил, пробовал и то, и то.
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
20.02.2016, 17:19     Цикл не прерывается при вводе Enter #25
Цитата Сообщение от НовыйНовичок Посмотреть сообщение
Это тоже проверил, пробовал и то, и то.
В программировании чудес не бывает. Весь код покажи. Среда какая?
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
21.02.2016, 20:58     Цикл не прерывается при вводе Enter #26
Использую, MSVS2010.
В начале только написано еще setlocale(LC_ALL, "Russian" ); и соответствующий include включен. Это весь код.
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
21.02.2016, 21:50     Цикл не прерывается при вводе Enter #27
Цитата Сообщение от НовыйНовичок Посмотреть сообщение
Использую, MSVS2010.
Тебе показать, что это код (20 пост) в 10-й студии работает, или не надо?
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
21.02.2016, 22:40     Цикл не прерывается при вводе Enter #28
Если он рабоотает, именно в таком виде, тогда пока не надо, после праздников, я выложу скриншот, где он не работает.
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
24.02.2016, 10:27     Цикл не прерывается при вводе Enter #29
Ещё раз код:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <locale>
 
using namespace std;
 
int main()
{   
    setlocale(LC_ALL, "Russian");
    char otvet = 'б';
    while(otvet != 'с')
    {   
        cout << "Введите символ 'с' для выхода\n";
        cin >> otvet;
    }
    return 0;
}
Скрин во вложении.
Миниатюры
Цикл не прерывается при вводе Enter  
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
24.02.2016, 10:55     Цикл не прерывается при вводе Enter #30
Угу, символы русские, а русского ввода в коде нет. На английские символы замени, или сделай русский ввод в коде, например, так:
C++
1
2
3
4
5
6
7
8
#include <windows.h>
 
int main()
{
  SetConsoleCP(1251);
  SetConsoleOutputCP(1251);
  ...
}
В свойствах консоли выбрать шрифт: Lucida Console.

Добавлено через 2 минуты
Цитата Сообщение от НовыйНовичок Посмотреть сообщение
Это тоже проверил, пробовал и то, и то.
Сказки, с английскими символами всё будет работать.
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
24.02.2016, 11:26     Цикл не прерывается при вводе Enter #31
Ок,спасибо, да с англ. работает! Только я не понял как он воспринимает тогда эти русские символы, какие числа в соответсвие ставит?

Добавлено через 2 минуты
Сказки, с английскими символами всё будет работать.
по-поводу
Я имел ввиду, что проверял только на неравенство русскому символу, но на случай, если там английский в условии у меня вдруг случайно попал,но случайно не попал, пробовал ввести тоже англ.
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
24.02.2016, 11:30     Цикл не прерывается при вводе Enter #32
Цитата Сообщение от НовыйНовичок Посмотреть сообщение
Только я не понял как он воспринимает тогда эти русские символы, какие числа в соответсвие ставит?
Выведи, приводя к int, и посмотри (только объяви otvet как unsigned char, а то отрицательны числа могут быть). В консоли windows другая кодировка (866), не та что в коде (1251), поэтому и получается несовпадение.
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
24.02.2016, 11:31     Цикл не прерывается при вводе Enter #33
Кто может объяснить подробно как воспринимается русский символ 'п' или 'л' или 'c' на скриншоте, какой у них числовой код, а какой код идёт на консоль, когда я меняю язык и ставлю русский символ?

Добавлено через 1 минуту
Ок, не спел спросить, это и хотел спросить, теперь всё ясно, спасибо еще раз!
nd2
1513 / 1252 / 425
Регистрация: 29.01.2016
Сообщений: 3,858
24.02.2016, 11:39     Цикл не прерывается при вводе Enter #34
Цитата Сообщение от НовыйНовичок Посмотреть сообщение
Я имел ввиду, что проверял только на неравенство русскому символу, но на случай, если там английский в условии у меня вдруг случайно попал,но случайно не попал, пробовал ввести тоже англ.
Сейчас посмотрел: в коде, в 20 посте, у тебя английские символы стоят, поэтому непонятно, как и что ты пробовал. Может не знал, что там английские стоят? Для таких проб не нужно выбирать символы, которые одинаково выглядят в двух языках.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.02.2016, 21:16     Цикл не прерывается при вводе Enter
Еще ссылки по теме:

Завершить игровой цикл при вводе нуля C++
Завершить цикл при вводе значения первой переменной C++
C++ Бесконечный цикл при вводе несоответствующего типа данных

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

Или воспользуйтесь поиском по форуму:
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
24.02.2016, 21:16     Цикл не прерывается при вводе Enter #35
Нет я код для форума написал, сам от руки, а не скопипастил, так как на компе для упражнений закрыты usb-порты. ))
Yandex
Объявления
24.02.2016, 21:16     Цикл не прерывается при вводе Enter
Ответ Создать тему
Опции темы

Текущее время: 07:56. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru