Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск  
 
 
Рейтинг 4.54/13: Рейтинг темы: голосов - 13, средняя оценка - 4.54
2 / 2 / 1
Регистрация: 27.06.2012
Сообщений: 39

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

19.02.2016, 14:56. Показов 3215. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Локальный http сервер
Argus19 17.10.2026
Локальный http сервер На работе, на двух локальных компьютерах круглосуточно работают программы опроса приборов с записью в книги Excel,которые раз в сутки записываются на сервер компании. Т. к. . . .
Копировать Windows на новый диск на UEFI
damix 17.10.2026
https:/ / uriesk. wordpress. com/ 2016/ 11/ 01/ move-window-10-to-ssd-on-a-uefi-dualboot-system-with-basic-linux-tools/ TL DR Вставляем диск, а старый подключаем через переходник, грузимся с лайва. . .
ИИ не может найти нужный язык в списке
Supersumestria 05.10.2026
Я ему даю вот такое изображение и прошу найти и подчеркнуть немецкий язык. Возвращает он вот это: https:/ / i. **********/ vqBWLe2. png Нужную строчку в 3й колонке просто выдумал. . Это. . .
Новая последняя моя музыка в SUNO
zorxor 05.10.2026
Здравствуйте, дорогие мои друзья! С большой радостью я хотел бы представить вам свою новую последнею музыку, которую сгенерировала мне по моей просьбе нейросеть SUNO. С уважением, zorxor. Это. . .
Программный домашний кинотеатр
russiannick 27.09.2026
Сподобился на программный домашний кинотеатр. В качестве ЯВУ по традиции выбрал js. В помощники взял Яндекс-Алису. Было создано три зала на разные интересы. исторические и ретро сериал Хичкок. . .
Беседа с ИИ о программистах, недопускающих к созданию и правке кода генеративные ИИ и причины этого
zorxor 21.09.2026
Раньше я радовался или получал некоторые эмоции, пусть небольшие, но всё же, от самого процесса написания кода, рекомпиляции и запуска, видя постепенное развитие программы и прочее. А теперь лень. . .
Мобильное приложение ColorStep
pavlinmavlin 17.09.2026
Реализовал приложение Красный, Зеленый, Синий в Unity3d + c#. Название изменил на ColorStep. Приложение прошло модерацию и теперь доступно для скачивания. Делал его сам, шаг за шагом — и вот,. . .
Запрет дублирования строк в табличной части
Maks 13.09.2026
Реализация из решения ниже выполнена на нетиповом справочнике "Нормы ТО" с табличной часть "Виды ТО", разработанного в КА2, со следующими реквизитами: - ВидТО (СправочникСсылка. ВидыТО); - ВидГСМ. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru