Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/4: Рейтинг темы: голосов - 4, средняя оценка - 5.00
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
1

Почему не происходит ввод? (cin)

08.05.2013, 19:22. Просмотров 673. Ответов 9
Метки нет (Все метки)

Здравствуйте.
Скажите, пожалуйста, почему нету приглашения ввести переменную s?
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
int main()
{
    cout<<"Enter digits, for exit press \"|\":\n";
    vector<int> valv;
    int val=0, d=9, sum=0, s=0;
    while (cin>>val){ valv.push_back(val); }
    cout<<"How many digits you want to sum?\n";
    cin>>s;
    for (int i=0; i<s; ++i)
    {
        sum+=valv[i];
    }
    cout<<"Sum of first "<<s<<" values ";
    for (int i=0; i<s; ++i)
    {
        cout<<valv[i]<<' ';
    }
    cout<<"equal "<<sum<<'\n';
}
Вот что выводит:
Почему не происходит ввод? (cin)
0
QA
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:22
Ответы с готовыми решениями:

при некорректном вводе cin далее уже не принимает ввод, не понимаю почему?
В условии if (cin &gt;&gt; A &gt;&gt; B) {...} при некорректном вводе cin далее уже не принимает ввод, не...

После 1-го цикла пропускается ввод adres, почему так происходит?
#include&lt;iostream&gt; #include &lt;cstring&gt; using namespace std; struct anketa{ char fio;...

Ввод через пробел. Как остановить ввод. while(cin >> input)
Здравствуйте. Начну с условия задания. Ввести к-во элементов массива. Заполнить массив....

Как работает cin.peek, cin,get, cin.ignore, cin.clear?
Здравствуйте, товарищи и не товарищи!:) Я только начал изучать C++, а уже использую вещи, которые...

9
Chudakulli
1 / 1 / 1
Регистрация: 16.02.2013
Сообщений: 57
08.05.2013, 19:52 2
Может из цикла while выйти не может, потому что там не получается false?

Добавлено через 2 минуты
Ой, нет, тут что-то другое....
0
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 19:54  [ТС] 3
Да, выводит же последующие слова. Да и символ "|" явно не int. Знать бы что...
0
Chudakulli
1 / 1 / 1
Регистрация: 16.02.2013
Сообщений: 57
08.05.2013, 20:46 4
Попробуй так:
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
#include "stdafx.h"
#include <vector>
#include <iostream>
using namespace std;
 
 
int main()
{
    cout<<"Enter digits, for exit press \"0\":\n";
    vector<int> valv;
    int val=1, d=9, sum=0, s=0;
    while (val){ cin>>val; valv.push_back(val);}
    cout<<"How many digits you want to sum?\n";
    cin>>s;
    for (int i=0; i<s; ++i)
    {
        sum+=valv[i];
    }
    cout<<"Sum of first "<<s<<" values ";
    for (int i=0; i<s; ++i)
    {
        cout<<valv[i]<<' ';
    }
    cout<<"equal "<<sum<<'\n';
    return 0;
}
0
BumerangSP
4292 / 1414 / 463
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
08.05.2013, 20:47 5
По сути, ввод знака приведет к ошибке (некритической) ввода и поэтому цикл завершится, т.к. условие у него такое. Можно даже сделать проверку:
C++
1
2
if (cin.fail())
 cout <<"Ошибка";
Решение:
Такой код перед cin >> s должен помочь:
C++
1
2
cin.clear();
std::cin.ignore( std::numeric_limits<std::streamsize>::max(), '\n' );
И подключить библиотеку limits.
2
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 21:11  [ТС] 6
Chudakulli, спасибо. Но так же само получается...


BumerangSP, спасибо, помогло.
Проблема, как я понял, была в том, что для cin>>s, в s шел знак '|', но т. к. он записывался в integer переменную, то в s направился 0? Так?
Вторую строчку я не совсем понял, можно пояснить, пожалуйста, в паре предложений?
0
Chudakulli
08.05.2013, 23:03
  #7

Не по теме:

Интересно... :swoon:

0
Tulosba
:)
Эксперт С++
4762 / 3256 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
08.05.2013, 23:17 8
Цитата Сообщение от andrejap Посмотреть сообщение
Проблема, как я понял, была в том, что для cin>>s, в s шел знак '|', но т. к. он записывался в integer переменную, то в s направился 0? Так?
Наполовину. При чтение символа '|' как числа произошла ошибка. Из-за этого установился failbit для потока ввода cin. Это привело к завершению цикла чтения. По сути, вместо '|' могло быть всё что угодно, что нельзя интерпретировать как число. Дальше, пока поток ввода находится в ошибочном состоянии, чтение из него невозможно. Поэтому нужно привести его в нормальное состояние. А это как раз относится к теме Вашего следующего вопроса:
Цитата Сообщение от andrejap Посмотреть сообщение
Вторую строчку я не совсем понял, можно пояснить, пожалуйста, в паре предложений?
Предлагаю почитать самому по ссылке:
http://www.cplusplus.com/reference/istream/istream/ignore/
Будут вопросы - спрашивайте.
1
andrejap
13 / 13 / 7
Регистрация: 21.04.2013
Сообщений: 245
09.05.2013, 12:16  [ТС] 9
Да я туда обратился, но пока ничего не пойму - еще слишком много не известных мне выражений, напр.: EOF, delim, std::streamsize. Видимо, на данном этапе обучения следует принять их как технические подробности.
0
Tulosba
:)
Эксперт С++
4762 / 3256 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
09.05.2013, 12:31 10
Цитата Сообщение от andrejap Посмотреть сообщение
EOF, delim, std::streamsize
EOF - End Of File - признак конца файла (потока)
delim - Символ-разделитель
std::streamsize - тип для представления размеров и числа символов в потоках (по сути обычный знаковый целый тип)
Для начала Вам следует более подробно ознакомиться с теорией потокового ввода/вывода в С++.
1
09.05.2013, 12:31
Answers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
09.05.2013, 12:31

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Считывание чаров из cin происходит не корректно
Доброго времени суток! В процедуре void Enter(char* massive) считываю чары в массив. Если в строке...

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод....

Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()
Такая проблема: сдаю в вуза лабораторные по программированию, писал все сам, до этого c++ не...

Ввод cin
Я тут раньше задавал подобный вопрос, то тема умерла, по ходу. Здесь приведен листинг функции ввода...


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

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

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