2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39

Как читает поток ввода cin ?

19.02.2016, 14:56. Показов 3241. Ответов 24
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Спасибо большое, разобрался.

Возникли новые вопросы:
1) как читает поток ввода оператор cin ?
Например:
C++
1
2
3
4
char a[20],b[20];
        cin >> a;
        cin >> b;
        cout << "Вы ввели: " << a << ", " << b << endl;
Почему в таком случае второй оператор cin прочитает ввод? Ведь в потоке ввода остается мой "Enter" после первого ввода.

2) В примере динамически объявлен массив со структурами. Вопрос с присвоением значений. Присвоить значения могу так:
C++
1
ArrayStruct->Weight=2.3;
а вот так уже не могу:
C++
1
(ArrayStruct+1)->Weight=2.3;
Также, могу вывести значения так:
C++
1
 cout << (*ArrayStruct).Name << ", " << (*ArrayStruct).Weight << ", " << (*ArrayStruct).Coloris << ";" << endl;
А вот так уже нет:
C++
1
cout << (ArrayStruct+1)->Name << ", " << (ArrayStruct+1)->Weight << ", " << (ArrayStruct+1)->Coloris << ";" << endl;
Вот весь код:
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
27
28
29
30
 struct CandyBar
    {
        char Name[20];
        float Weight;
        int Coloris;
   };
    int Sz;
    char Twix[20];
    strcpy(Twix,"Twix"); //Копируем значение в символьный массив
    cout << "Введите размер массива: (3)";
    cin >> Sz;
    CandyBar * ArrayStruct=new CandyBar [Sz];
    strncpy(ArrayStruct->Name,"Moch Munch",20); //Копируем значение в символьный массив;
    ArrayStruct->Weight=2.3;
    ArrayStruct->Coloris=350;
    strncpy(ArrayStruct[1].Name,"Snikers",20); //Копируем значение в символьный массив;
    ArrayStruct[1].Weight=1.2;
    ArrayStruct[1].Coloris=370;
    strcpy(ArrayStruct[2].Name,Twix); //Копируем переменную Twix в переменную Name 
    ArrayStruct[2].Weight=2.3;
    ArrayStruct[2].Coloris=350;
 
    cout << "ArrayStruct[0]:\n";
    cout << (*ArrayStruct).Name << ", " << (*ArrayStruct).Weight << ", " << (*ArrayStruct).Coloris << ";" << endl;
    cout << "ArrayStruct[1]:\n";
    cout << ArrayStruct[1].Name << ", " << ArrayStruct[1].Weight << ", " << ArrayStruct[1].Coloris << ";" << endl;
   // cout << (ArrayStruct+1).Name << ", " << (ArrayStruct+1)->Weight << ", " << (ArrayStruct+1)->Coloris << ";" << endl; //Почему нельзя так?
    cout << "ArrayStruct[2]:\n";
    cout << ArrayStruct[2].Name << ", " << ArrayStruct[2].Weight << ", " << ArrayStruct[2].Coloris << ";" << endl;  
    delete [] ArrayStruct;
3) Вопрос, непосредственно по ДЗ, не могу понять в чем дело, ввожу в массив[12][3] двенадцать 5, двенадцать 3, двенадцать 1. Считаю сумму по каждой строчке и по массиву в целом. Считается все правильно. Но вот вывод массива на экран не верен. Предоставляю код программы и результат выполнения. Подскажите пожалуйста, что с выводом не так:
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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
 int S,It,Rz;
        const int Rz1=12;
        const int Rz2=3;
        int Sl[Rz1][Rz2];
        cout << "Введите количество месяцев в году (12): ";
        cin >> Rz;
        string * pt=new string [Rz];
        * pt="Январь";
        *(pt+1)="Февраль";
        *(pt+2)="Март";
        *(pt+3)="Апрель";
        *(pt+4)="Май";
        *(pt+5)="Июнь";
        *(pt+6)="Июль";
        *(pt+7)="Август";
        pt[8]="Сентябрь";
        pt[9]="Октябрь";
        pt[10]="Ноябрь";
        pt[11]="Декабрь";
        S=0,It=0;
        for (int i=0; i<Rz2;++i)
        {
            cout << "Введите продажи (шт) за " << i+1 << " год: " << endl;
            for (int j=0;j<Rz1;++j)
            {
                cout << "Введите продажи (шт) за " << *(pt+j) << " месяц: ";
                cin >> Sl[i][j];
                S+=Sl[i][j];
            }
            cout << "Общая сумма продаж за " << i+1 << " год: " << S << endl;
            It+=S;
            S=0;
        }
        cout << "За " << Rz2 << " года продано: " << It << endl << endl;
        cout << "Введенный массив: " << endl;
        //Впорос: почему некорретен вывод массива?
        for (int i=0; i<Rz2; ++i)
        {   
            cout << i+1 << " год:\n";
            for (int j=0;j<Rz1;++j)
            {
                cout << Sl[i][j] ;//<< "\t";
            }
            cout << endl;
        }
Результат выполнения:

Введите количество месяцев в году (12): 12
Введите продажи (шт) за 1 год:
Введите продажи (шт) за Январь месяц: 5
Введите продажи (шт) за Февраль месяц: 5
Введите продажи (шт) за Март месяц: 5
Введите продажи (шт) за Апрель месяц: 5
Введите продажи (шт) за Май месяц: 5
Введите продажи (шт) за Июнь месяц: 5
Введите продажи (шт) за Июль месяц: 5
Введите продажи (шт) за Август месяц: 5
Введите продажи (шт) за Сентябрь месяц: 5
Введите продажи (шт) за Октябрь месяц: 5
Введите продажи (шт) за Ноябрь месяц: 5
Введите продажи (шт) за Декабрь месяц: 5
Общая сумма продаж за 1 год: 60
Введите продажи (шт) за 2 год:
Введите продажи (шт) за Январь месяц: 3
Введите продажи (шт) за Февраль месяц: 3
Введите продажи (шт) за Март месяц: 3
Введите продажи (шт) за Апрель месяц: 3
Введите продажи (шт) за Май месяц: 3
Введите продажи (шт) за Июнь месяц: 3
Введите продажи (шт) за Июль месяц: 3
Введите продажи (шт) за Август месяц: 3
Введите продажи (шт) за Сентябрь месяц: 3
Введите продажи (шт) за Октябрь месяц: 3
Введите продажи (шт) за Ноябрь месяц: 3
Введите продажи (шт) за Декабрь месяц: 3
Общая сумма продаж за 2 год: 36
Введите продажи (шт) за 3 год:
Введите продажи (шт) за Январь месяц: 1
Введите продажи (шт) за Февраль месяц: 1
Введите продажи (шт) за Март месяц: 1
Введите продажи (шт) за Апрель месяц: 1
Введите продажи (шт) за Май месяц: 1
Введите продажи (шт) за Июнь месяц: 1
Введите продажи (шт) за Июль месяц: 1
Введите продажи (шт) за Август месяц: 1
Введите продажи (шт) за Сентябрь месяц: 1
Введите продажи (шт) за Октябрь месяц: 1
Введите продажи (шт) за Ноябрь месяц: 1
Введите продажи (шт) за Декабрь месяц: 1
Общая сумма продаж за 3 год: 12
За 3 года продано: 108

Введенный массив:
1 год:
555333111111
2 год:
333111111111
3 год:
111111111111
Для закрытия терминала нажмите клавишу [ВВОД]...
0
Лучшие ответы (1)
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
19.02.2016, 14:56
Ответы с готовыми решениями:

Поток ввода cin
Привет. Я только начинаю учить C++, так что не смейтесь если проблема примитивная, но всё равно прошу помочь :) Учусь по книге...

Поток ввода cin
vector&lt;string&gt; str; for (string s; cin &gt;&gt; s &amp;&amp; !s.empty(); str.push_back(s)); // !!! for (auto &amp;i : str) for (auto &amp;j : i) j...

Пропускает поток ввода cin
Решал задачку из книжки Страуструпа. В общей сложности решил. Но столкнулся с проблемой, после ввода элементов типа int в вектор через...

24
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
21.02.2016, 12:35  [ТС]
Студворк — интернет-сервис помощи студентам
Croessmah, спасибо, разобрался.

Цитата Сообщение от avgoor Посмотреть сообщение
Nextor257, (ArrayStruct+1)->Weight - эквивалентно ArrayStruct[1].Weght.
Я знаю что эквивалентно, я специально так пишу, чтоб попробовать разные способы.

Цитата Сообщение от Croessmah Посмотреть сообщение
avgoor, думаете, прокатит?
если в NetBeans интеллисенс непредсказуемо работает, какую бесплатную среду разработки можете посоветовать?

Цитата Сообщение от nd2 Посмотреть сообщение
Nextor257, NetBeans в топку
а что тогда из бесплатного?
0
 Аватар для avgoor
1550 / 877 / 179
Регистрация: 05.12.2015
Сообщений: 2,555
21.02.2016, 12:36
Nextor257, Microsoft Visual Studio 2015 community.
1
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,430
21.02.2016, 12:37
Цитата Сообщение от Croessmah Посмотреть сообщение
А если внимательнее посмотреть?
Ниже выводится. Он же про (ArrayStruct+1)->Weight спрашивает:
Цитата Сообщение от Nextor257 Посмотреть сообщение
//(ArrayStruct+1)->Weight=2.3; на такой строке компилятор выдает ошибку "Не возможно разрешить идентификатор Weight".
//Однако код компилируется, но на выводе в консоль в этой переменной значение 2.39907е+011.
//Наверно я с адресом на путал и мне выводится случайное значение в памяти??
Цитата Сообщение от Nextor257 Посмотреть сообщение
какое значение у тебя получается в этой переменной (ArrayStruct+1)->Weight ?
У тебя код путанный. Ты сначала одно значение там задаёшь, потом другое, одно закоментировал, другое раскоментировал, так выводишь, этак выводишь. Сделай однообразно, потом разбирайся.
0
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39
21.02.2016, 12:43  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
У тебя код путанный. Ты сначала одно значение там задаёшь, потом другое, одно закоментировал, другое раскоментировал, так выводишь, этак выводишь. Сделай однообразно, потом разбирайся.
Да, как то не хорошо получилось, сам удивлен такой не внимательностью)

Всем спасибо за помощь.
0
Неэпический
 Аватар для Croessmah
18150 / 10732 / 2067
Регистрация: 27.09.2012
Сообщений: 27,047
Записей в блоге: 1
21.02.2016, 16:02
Цитата Сообщение от nd2 Посмотреть сообщение
Он же про (ArrayStruct+1)->Weight спрашивает
Цитата Сообщение от nd2 Посмотреть сообщение
но на выводе в консоль в этой переменной значение 2.39907е+011.
На выводе (ArrayStruct+1)->Weight
имеет нормальное значение,
а он смотрит на ArrayStruct->Weight
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
21.02.2016, 16:02

Поток ввода cin и его очистка(?)
Есть необходимость заполнять поля члены класса в консоли через ввод. Есть следующий отдельный класс, который и занимается этим делом: ...

Поток ввода cin работает сам по себе
Привет :) Написал программу, забыл поставить после условия строку для ввода символов cin. Но он работает и так без меня. Т.е. я ввожу...

Какая функция объекта cin позволяет вставить символ в поток ввода?
Какая функция обьекта cin позволяет вставить символ в поток ввода?Пример,если можно.

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

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


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

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

Новые блоги и статьи
Про "Windows must die!"
kumehtar 04.11.2026
Знаете, чет накатило. . . . Когда-то это было почти боевым кличем: мол, нормальный человек сидит на DOS, OS/ 2 или Linux, а вот это вот - Must Die. А теперь человек произносит «мастдай» с усмешкой - и. . .
Красочные поля с номером страницы svg+background-image
russiannick 04.11.2026
Красочные поля с номером страницы не менее важны чем в эпоху бумажных книг. Посему спешу представить почтеннейшей публике этот важный инструмент который эти поля и формирует. В процессе разработки. . .
Вступаем в новую фазу генерации favicons, векторную.
russiannick 02.11.2026
Теперь нет нужды скрывать что используется простой svg. Исходный код изображения помещаем в поле и жмем кнопку. Исходник преобразуется в вид корректный для помещения в favicon или в url(). Нажатие. . .
Генератор паролей (вариант №4)
Maks 01.11.2026
После публикации 3-го варианта генератора паролей, разослал его своим коллегам (с целью оценки), в итоге были получены следующие рекомендации: 1. Вернуть возможность использования знаков | 1 l I;. . .
Генератор паролей (вариант №3)
Maks 30.10.2026
Финальная версия генератора паролей 1С. Доработка решения в этот раз коснулась только визуальной части, а именно, добавлен реквизит ДопПараметры (тип Булево), который скрывает/ отображает реквизиты:. . .
Магическое мышление и магия, современная наука не отличима от магии (говорит ИИ Джемени)
zorxor 30.10.2026
Джемени, расскажи, пожалуйста, что такое магическое мышление, что такое магия, почему современная наука чем-то напоминает магию? Фраза «Любая достаточно развитая технология неотличима от магии». . .
За какое время ИИ может подобрать пароль по хешу (рассказывает Джемени ИИ)
zorxor 30.10.2026
Расскажи, Джемени, если известен хэш МД5, например, за сколько ИИ сможет подобрать соответствующий пароль? Искусственный интеллект (ИИ) может подобрать простой или средний по сложности пароль по. . .
Кто убил Suno? Почему наше солнышко погасло? (диалог с ИИ Джемени)
zorxor 30.10.2026
Как убивали Suno. Хронология. «Убийство» музыкальной нейросети Suno — это затяжной процесс, в котором технологический хайп стартапа разбился о жесткую реальность судебных исков от гигантов. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru