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

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

Восстановить пароль Регистрация
 
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 19:22     Почему не происходит ввод? (cin) #1
Здравствуйте.
Скажите, пожалуйста, почему нету приглашения ввести переменную 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)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2013, 19:22     Почему не происходит ввод? (cin)
Посмотрите здесь:

C++ Cin - ввод значения по умолчанию
Корректный ввод с cin C++
Ввод cin C++
C++ ввод данных cin >>
cin читает прежний ввод C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 49
08.05.2013, 19:52     Почему не происходит ввод? (cin) #2
Может из цикла while выйти не может, потому что там не получается false?

Добавлено через 2 минуты
Ой, нет, тут что-то другое....
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 19:54  [ТС]     Почему не происходит ввод? (cin) #3
Да, выводит же последующие слова. Да и символ "|" явно не int. Знать бы что...
Chudakulli
1 / 1 / 0
Регистрация: 16.02.2013
Сообщений: 49
08.05.2013, 20:46     Почему не происходит ввод? (cin) #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;
}
BumerangSP
 Аватар для BumerangSP
4283 / 1405 / 121
Регистрация: 16.12.2010
Сообщений: 2,941
Записей в блоге: 3
08.05.2013, 20:47     Почему не происходит ввод? (cin) #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.
andrejap
13 / 13 / 1
Регистрация: 21.04.2013
Сообщений: 245
08.05.2013, 21:11  [ТС]     Почему не происходит ввод? (cin) #6
Chudakulli, спасибо. Но так же само получается...


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

Не по теме:

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

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

C++ Ввод только чисел в cin>>value
C++ Считывание чаров из cin происходит не корректно
Игнорирует ввод cin C++

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

Или воспользуйтесь поиском по форуму:
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
09.05.2013, 12:31     Почему не происходит ввод? (cin) #10
Цитата Сообщение от andrejap Посмотреть сообщение
EOF, delim, std::streamsize
EOF - End Of File - признак конца файла (потока)
delim - Символ-разделитель
std::streamsize - тип для представления размеров и числа символов в потоках (по сути обычный знаковый целый тип)
Для начала Вам следует более подробно ознакомиться с теорией потокового ввода/вывода в С++.
Yandex
Объявления
09.05.2013, 12:31     Почему не происходит ввод? (cin)
Ответ Создать тему
Опции темы

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