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

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

Восстановить пароль Регистрация
 
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 10:16     Цикл не прерывается при вводе Enter #1
Хотелось бы узнать почему цикл 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
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 11:08     Цикл не прерывается при вводе Enter #2
Вводить надо не enter а ctrl+Z
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 11:25  [ТС]     Цикл не прерывается при вводе Enter #3
Цитата Сообщение от zss Посмотреть сообщение
Вводить надо не enter а ctrl+Z
Не понял. Причем тут контрол +з?
Ввожу несколько чисел жму энтер не чего не произходит. Ввожу любой другой символ потом ентер программа работает
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 12:08     Цикл не прерывается при вводе Enter #4
ctrl+Z - это признак конца файла.
Изображения
 
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 13:35  [ТС]     Цикл не прерывается при вводе Enter #5
Народ помогите мне. Прошу. В чем моя ошибка? Не чего не могу придумать. Цикл while должен остановится если условия цикла не верны. При вводе enter переменная "а" получает значение '\n'. Что делает условия цикла не верным.
C++
1
2
char s = '\n';
while(std::cin >> a && a != s)
Цикл должен прекратится при получение a = '\n';

Пробовал следующие варианты чтоб остановит цикл при нажатие энтер.
C++
1
2
3
4
5
6
7
char s = '\n';
while(std::cin >>a)
{
if( a == s)
break;
else
....}
Не работает. Цикл должен прекратится если условия оператора if верны (а == s)

C++
1
2
3
4
5
std::cin >> a;
    do  
        a % 2 != 0 ? num.push_back(a*2): num.push_back(a);
        while( a == s)
            break;
Выдает ошибку типа перед break; должен быт ";" Не знаю в чем проблема. Но цикл должен прекратится.

C++
1
2
3
4
std::cin >> a;
    while( a != s)
        {
    a % 2 != 0 ? num.push_back(a*2): num.push_back(a);}
Не работает. Цикл должен проверит условие a != s и продолжит своею работу если резулmтат условия true.

Добавлено через 4 минуты
zss, условия цикла требует чтоб цикл остановился при получение символа новой строки. Потом причем тут контрол +з? Цикль завершаеться при получение любого символа который отличается от int. Но надо чтоб программа работала правильно. Это похоже на остановку машины без тормозов.

Добавлено через 14 минут
Тема актуальна. Мне все еще нужна помощь. Уже 2 дня проверяю этот код.

Добавлено через 34 минуты
Тема актуальна. Мне все еще нужна помощь.
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 14:04     Цикл не прерывается при вводе Enter #6
Цитата Сообщение от Altair42 Посмотреть сообщение
while(std::cin >>a)
Поскольку a имеет тип int, то при вводе все пробельные символы пропускаются
(в т.ч. и '\n'). А чем Вас не устраивает ctrl+Z ? Это общеизвестный способ завершения консольного ввода.
В посте №4 я продемонстрировал, что на Вашей программе он прекрасно срабатывает.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 14:33  [ТС]     Цикл не прерывается при вводе Enter #7
zss, я знаю что он работает. Так же как и ввод любого символа. Но это не этично ввести ошибочный символ чтоб завершит цикл. Может быт для вас это в порядке вещей. Но представте что вы пишете программу для кого та. Пользователь нажимает энтер но не чего не произходит. Пользователь не должен знать что если ввести ошибочный символ программа заработает. Язык С++ предоставляет возможности завершит цикл. Вам бы понравилось если бы на вашей машине не работали тормоза и каждый раз чтоб тормозит вам пришлось бы врезаться об стену?
Да все пробельные символы пропускаются но сим вол новой строки инициализирован. Я так делал в других программах все работало норм.
Если символ новый строки пропускаеться как и пробел то почему работает этот код?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    setlocale (LC_ALL, "Russian");
    vector<int> num;
    std::cout << " Введите несколько чисел : "  <<std::endl;
    int a;
    char s='\n';
    while (std::cin >> a && a != s)
     {   num.push_back(a);
    
    
    int *ar = new int [num.size()];
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar + 1 << std::endl;}
     delete [] ar;
    }
        _getch();
            return 0;
    }
Разница в цикле while только в том что в коде котором я показал на первом посте за 1 шаг цикла делаеться несколько операциий. А на этом коде только 1.

Добавлено через 8 минут
И еще. Если дат условие чтоб цикл завершился при получение символа пробела то он должен завершится. Не имеет значение какой символ если в условие написано что надо завершит цикл при получение хз какого та там символа то цикл должен завершится.

Добавлено через 1 минуту
Прошу прошение в этом коде несколько операций. Забыл про фигурные скобки
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 15:45     Цикл не прерывается при вводе Enter #8
ctrl+Z это не ошибочный символ. это признак конца ввода.
Но если Вас не устраивает, то читайте в текстовую строку,
а потом переводите в целое число:
C++
1
2
3
char buf[100];
cin.getline(buf,100);
int a=atoi(buf);
Цитата Сообщение от Altair42 Посмотреть сообщение
while (std::cin >> a && a != s) { num.push_back(a);}
Есть один выход из этого цикла- ввод числа 10, тогда 10=='\n' истина.
Но как оператор до такого догадается? А то, что ctrl+Z - конец ввода почти все знают
(наверное кроме Вас).
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
27.05.2014, 16:19     Цикл не прерывается при вводе Enter #9
C++
1
int a ;
При вводе чисел разделители игнорируются(пробелы, табуляция, переводы строк), так что
C++
1
std::cin >> a && a!= s;
будет истинно пока не будет введено число, равное коду '\n'(char s = '\n'), или пока не произойдет ошибка чтения числа(например, наткнется на букву)
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 16:44  [ТС]     Цикл не прерывается при вводе Enter #10
Croessmah я это понял н огда почему следующая программа работает?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
int main()
{
    setlocale (LC_ALL, "Russian");
    vector<int> num;
    std::cout << " Введите несколько чисел : "  <<std::endl;
    int a;
    char s='\n';
    while (std::cin >> a && a != s)
     {   num.push_back(a);
    
    
    int *ar = new int [num.size()];
     for(vector<int>::iterator iter = num.begin(); iter != num.end(); iter++)
     {for(int *q = ar; q != ar + num.size(); q++)
     *ar = *iter;
     std::cout << "Символ массива " << *ar + 1 << std::endl;}
     delete [] ar;
    }
        _getch();
            return 0;
    }
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 16:49     Цикл не прерывается при вводе Enter #11
Цитата Сообщение от Altair42 Посмотреть сообщение
почему следующая программа работает?
Еще раз повторяю - она точно так же работает как и предыдущая.
Цикл while заканчивается в 2 случаях
1. При вводе числа 10
2. При вводе ctrl+Z.
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
27.05.2014, 16:50     Цикл не прерывается при вводе Enter #12
Цитата Сообщение от Altair42 Посмотреть сообщение
Croessmah я это понял н огда почему следующая программа работает?
Распишем по пунктам:
1. Считываем число в a
2. Добавляем число в вектор
3. Выделяем память под int'ы
4. Не понятные циклы с выводом
5. Освобождение памяти
6. Переходим к пункту один.

Получаем такое же поведение.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 17:02  [ТС]     Цикл не прерывается при вводе Enter #13
zss, в второй программе выход из цикла по нажатию энтер , при вводе 10 и при вводе любого символа.

Цикл не прерывается при вводе Enter
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 17:05     Цикл не прерывается при вводе Enter #14
Это не выход из цикла, а ожидание следующей порции ввода.
Посмотрите в отладчике.
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 17:05  [ТС]     Цикл не прерывается при вводе Enter #15
zss, я не говорил что вы не правы и т.п. Я вижу что 1 программа так работает а другой нет.

Цитата Сообщение от Croessmah Посмотреть сообщение
Получаем такое же поведение.
Не совсем такое. Эта программа при нажатие энтер выходит из цикла.
zss
Модератор
Эксперт С++
 Аватар для zss
6054 / 5657 / 1828
Регистрация: 18.12.2011
Сообщений: 14,448
Завершенные тесты: 1
27.05.2014, 17:07     Цикл не прерывается при вводе Enter #16
Цитата Сообщение от Altair42 Посмотреть сообщение
Эта программа при нажатие энтер выходит из цикла.
Да не выходит же!
Посмотрите в отладчике!
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
27.05.2014, 17:10     Цикл не прерывается при вводе Enter #17
Цитата Сообщение от Altair42 Посмотреть сообщение
Эта программа при нажатие энтер выходит из цикла.
при вводе 10 вышел
Цикл не прерывается при вводе Enter
Croessmah
Модератор
Эксперт С++
 Аватар для Croessmah
12271 / 6958 / 782
Регистрация: 27.09.2012
Сообщений: 17,259
Записей в блоге: 2
Завершенные тесты: 1
27.05.2014, 17:11     Цикл не прерывается при вводе Enter #18
Цитата Сообщение от Altair42 Посмотреть сообщение
в второй программе выход из цикла по нажатию энтер , при вводе 10 и при вводе любого символа.
на Вашем скриншоте ожидается ввод числа в std::cin>>a
Altair42
0 / 0 / 0
Регистрация: 28.06.2013
Сообщений: 322
27.05.2014, 17:21  [ТС]     Цикл не прерывается при вводе Enter #19
Еще раз спасибо всем что помогли. Я не программировал раньше. По этому не всегда могу понят что к чему. Спасибо за терпение!

Добавлено через 2 минуты
В школе на стaром IBM (не было не какой (или привычной) оперативки все запускали с дискет) рисовали линии и кружочки Изучили от силы 5 слов на языке бейзик.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
20.02.2016, 10:06     Цикл не прерывается при вводе Enter
Еще ссылки по теме:

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

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

Или воспользуйтесь поиском по форуму:
НовыйНовичок
0 / 0 / 0
Регистрация: 10.11.2013
Сообщений: 82
20.02.2016, 10:06     Цикл не прерывается при вводе Enter #20
У меня похожая проблема и хочу ещё уточнить, почему не выходит из цикла при нажатии символа 'c'?
C++
1
2
3
4
5
6
char otvet = 'a';
while(otvet != 'c')
{
cout << " Для выхода введите символ 'c'\n";
cin >> otvet;
}
Yandex
Объявления
20.02.2016, 10:06     Цикл не прерывается при вводе Enter
Ответ Создать тему
Опции темы

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