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

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

Войти
Регистрация
Восстановить пароль
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
#1

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

08.05.2013, 19:22. Просмотров 486. Ответов 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Почему не происходит ввод? (cin) (C++):

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

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

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

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

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

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

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

Добавлено через 2 минуты
Ой, нет, тут что-то другое....
0
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 19:54  [ТС] #3
Да, выводит же последующие слова. Да и символ "|" явно не int. Знать бы что...
0
Chudakulli
1 / 1 / 0
Регистрация: 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
4286 / 1408 / 121
Регистрация: 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 / 1
Регистрация: 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

Не по теме:

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

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

ввод данных cin >> - C++
Приветствую! #include &lt;iostream&gt; using namespace std; int main() {setlocale (LC_ALL,&quot;&quot;); int qt; float...

Корректный ввод с cin - C++
Пусть в программе есть оператор cin &gt;&gt; n, где n типа int, а пользователь вводит набор символов Как отследить это, не выдавая ошибку, и не...

Игнорирует ввод cin - C++
Не могу понять почему не считывает переменную 'q' в 13 строке. Программа просто обходит её стороной. #include &lt;iostream&gt; #include...

Ввод текста по cin - C++
Доброго времени суток. имею следующий код: OpenAsper oAsper; cin&gt;&gt;pathS; path = new char ; strcpy( path, pathS.c_str() ); ...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
09.05.2013, 12:31
Ответ Создать тему
Опции темы

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