Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.82/11: Рейтинг темы: голосов - 11, средняя оценка - 4.82
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165

Компилятор пропускает две строчки

27.02.2014, 23:07. Показов 2386. Ответов 13
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Здравствуйте!
Вкратце о задании: нужно создать структуру, с помощью которой будет вводится информация о товаре.
Два элемента структуры строковые (название товара и страна-производитель). Первый вводится и везде отображается без проблем. А вот ввод второго просто пропускается, и последующая за ним строчка тоже.
(Строки 44-45)
Что делать?

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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// lab13.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "iostream"
#include "string"
 
using namespace std;
 
struct info
{
    char name[100];   //Nazvanie tovara
    float cost;      //Stoimost'
    char couOfProd[100];  //Strana-proizvodiel
    int endY;  //Konechnui srok god
    int endM;  //Konechnui srok mesyac
    int endD;  //Konechnui srok den'
    int numb;  //Kolichestvo
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char pointer;
    info InfoAboutProd[100];
    int i,n;
 
    i=0;
    pointer='y';
 
    do
    {
        i++;
 
        cout<<"Vvedite nazvanie tovara: ";      //Vvod nazvaniya tovara
        cin.getline(InfoAboutProd[i].name, sizeof(InfoAboutProd[i].name));
        cout<<endl;
 
        cout<<"Vvedite stoimost "<<InfoAboutProd[i].name<<": ";        //Vvod stoimosti tovara
        cin>>InfoAboutProd[i].cost;
        cout<<endl;
 
        cout<<"Vvedite stranu-proizvoditel' "<<InfoAboutProd[i].name<<": ";                 //Vvod proizvoditelya
        cin.getline(InfoAboutProd[i].couOfProd, sizeof(InfoAboutProd[i].couOfProd));
        cout<<endl;
 
        cout<<"Vvedite god v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";  // VVod goda, v kotorom istekaet srok godnosti
        cin>>InfoAboutProd[i].endY;
        cout<<endl;
 
        cout<<"Vvedite mesyac v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";  // VVod mesyaca, v kotorom istekaet srok godnosti
        cin>>InfoAboutProd[i].endM;
        cout<<endl;
 
        cout<<"Vvedite den' v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";   // VVod dnya, v kotorui istekaet srok godnosti
        cin>>InfoAboutProd[i].endD;
        cout<<endl;
 
        cout<<"Vvedite ostatok "<<InfoAboutProd[i].name<<" na sklade: ";   // VVod ostatka tovara na sklade
        cin>>InfoAboutProd[i].numb;
        cout<<endl;
 
        cout<<"Vu zhelaete vvesti ewe tovaru? (Y/N)  ";
        cin>>pointer;
 
    }
    while(pointer != 'n');
 
    //Vuvod infu TEST
 
    for(n=1; n<=i; n++)
    {
        cout<<"Nazvanie producta: "<<InfoAboutProd[i].name<<endl;   //Vuvod nazvaniya
        cout<<"Stoimsost' "<<InfoAboutProd[i].name<<": "<<InfoAboutProd[i].cost<<endl;   //Vuvod stoimosti
        cout<<"Strana-proizvoditel' "<<InfoAboutProd[i].name<<": "<<InfoAboutProd[i].couOfProd<<endl;    //Vuvod proizvoditelya
        cout<<"Goden do: "<<InfoAboutProd[i].endD<<"."<<InfoAboutProd[i].endM<<"."<<InfoAboutProd[i].endY<<endl; 
        cout<<"Ostatok na sklade"<<InfoAboutProd[i].numb<<endl;
    }
 
 
    system("pause");
    return 0;
}
Компилятор MS Visual Studio

Скриншот:

http://6.firepic.org/6/images/... 59in5n.png
Миниатюры
Компилятор пропускает две строчки  
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
27.02.2014, 23:07
Ответы с готовыми решениями:

Компилятор пропускает строчки с инициализацией
здравствуйте! Копмилятор пропускает строчки с инициализацией переменных. При попытке поставить маркер, переносит этот маркер на строчку...

Компилятор пропускает цикл
Здравствуйте товарищи. Столкнулся с проблемой, что компилятор пропускает цикл. Компилировал в VS2012. Потом сменил её на MinGW. Всё...

Компилятор пропускает getline
добрый вечер, пишу лабу для 10 класса по переводу числа из одной СС в другую. По неведомой мне причине компилятор пропускает строчку с...

13
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:27
Везде, где ввод через cin >>:
C++
1
(cin>>InfoAboutProd[i].cost).get();
1
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
27.02.2014, 23:35  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
(cin>>InfoAboutProd[i].cost).get();
вот так нужно сделать?

C++
1
2
3
cout<<"Vvedite stranu-proizvoditel' "<<InfoAboutProd[i].name<<": ";                 //Vvod proizvoditelya
        (cin>>InfoAboutProd[i].cost).get();
        cout<<endl;
Строчку пропускать перестало, только ввожу InfoAboutProd[i].cost сразу начинают бегать строчки в консоли и появляется окошко с такой ошибкой: "Необработанное исключение в "0x5b8b3b6c (msvcp100d.dll)" в "lab13.exe": 0xC0000005: Нарушение прав доступа при записи "0x0030002c"."
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:58
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
вот так нужно сделать?
Везде, где есть ввод через cin>>.
Исправленный код покажите.
1
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
28.02.2014, 00:08  [ТС]
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
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
// lab13.cpp: определяет точку входа для консольного приложения.
//
 
#include "stdafx.h"
#include "iostream"
#include "string"
 
using namespace std;
 
struct info
{
    char name[100];   //Nazvanie tovara
    float cost;      //Stoimost'
    char couOfProd[100];  //Strana-proizvodiel
    int endY;  //Konechnui srok god
    int endM;  //Konechnui srok mesyac
    int endD;  //Konechnui srok den'
    int numb;  //Kolichestvo
};
 
 
int _tmain(int argc, _TCHAR* argv[])
{
    char pointer;
    info InfoAboutProd[100];
    int i,n;
 
    i=0;
    pointer='y';
 
    do
    {
        i++;
 
        cout<<"Vvedite nazvanie tovara: ";      //Vvod nazvaniya tovara
        (cin>>InfoAboutProd[i].name).get();
        cout<<endl;
 
        cout<<"Vvedite stoimost "<<InfoAboutProd[i].name<<": ";        //Vvod stoimosti tovara
        (cin>>InfoAboutProd[i].cost).get();
        cout<<endl;
 
        cout<<"Vvedite stranu-proizvoditel' "<<InfoAboutProd[i].name<<": ";                 //Vvod proizvoditelya
        (cin>>InfoAboutProd[i].couOfProd).get();
        cout<<endl;
 
        cout<<"Vvedite god v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";  // VVod goda, v kotorom istekaet srok godnosti
        (cin>>InfoAboutProd[i].endY).get();
        cout<<endl;
 
        cout<<"Vvedite mesyac v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";  // VVod mesyaca, v kotorom istekaet srok godnosti
        (cin>>InfoAboutProd[i].endM).get();
        cout<<endl;
 
        cout<<"Vvedite den' v kotorom istekaet srok godnosti "<<InfoAboutProd[i].name<<": ";   // VVod dnya, v kotorui istekaet srok godnosti
        (cin>>InfoAboutProd[i].endD).get();
        cout<<endl;
 
        cout<<"Vvedite ostatok "<<InfoAboutProd[i].name<<" na sklade: ";   // VVod ostatka tovara na sklade
        (cin>>InfoAboutProd[i].numb).get();
        cout<<endl;
 
        cout<<"Vu zhelaete vvesti ewe tovaru? (Y/N)  ";
        cin>>pointer;
 
    }
    while(pointer != 'n');
 
    //Vuvod infu TEST
 
    for(n=1; n<=i; n++)
    {
        cout<<"Nazvanie producta: "<<InfoAboutProd[i].name<<endl;   //Vuvod nazvaniya
        cout<<"Stoimsost' "<<InfoAboutProd[i].name<<": "<<InfoAboutProd[i].cost<<endl;   //Vuvod stoimosti
        cout<<"Strana-proizvoditel' "<<InfoAboutProd[i].name<<": "<<InfoAboutProd[i].couOfProd<<endl;    //Vuvod proizvoditelya
        cout<<"Goden do: "<<InfoAboutProd[i].endD<<"."<<InfoAboutProd[i].endM<<"."<<InfoAboutProd[i].endY<<endl; 
        cout<<"Ostatok na sklade"<<InfoAboutProd[i].numb<<endl;
    }
 
 
    system("pause");
    return 0;
}
Вот код. Все чудненько работает. Можете объяснить эту строчку?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:14
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
cin>>pointer;
А здесь?

Добавлено через 1 минуту
getline() зачем убрали?

Добавлено через 1 минуту
Если getline() нет, то и без этого всё бы работало.
0
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
28.02.2014, 00:23  [ТС]
Что значит .get() и чем это отличается от getline?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:27
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Что значит .get() и чем это отличается от getline?
Я вам лучше скажу, чем getline() отличается от cin >>. Если у вас, например, название товара состоит из двух слов, то getline() считает оба слова, а cin >> только первое.

Добавлено через 34 секунды
Я разве говорил getline() убрать?
Цитата Сообщение от alsav22 Посмотреть сообщение
Везде, где ввод через cin >>:
0
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
28.02.2014, 00:32  [ТС]
Ну, и понимаю чем cin от getline отличается. Убирать не говорили. Куда тогда вставлять эту строку? И все же, что это значит?
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:42
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Куда тогда вставлять эту строку?
Эту - это какую? Я вам привёл пример конструкции, которую нужно использовать, в вашем коде, при вводе через cin >>:
C++
1
(cin>>InfoAboutProd[i].cost).get();
Т.е., было так:
C++
1
cin>>InfoAboutProd[i].cost;
Стало так:
C++
1
(cin>>InfoAboutProd[i].cost).get();
Было так:
C++
1
cin>>InfoAboutProd[i].endY;
Стало так:
C++
1
(cin>>InfoAboutProd[i].endY).get();
И т.д.
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
И все же, что это значит?
Это значит, что перд getline() нужно убрать '\n' из потока ввода.
0
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
28.02.2014, 00:58  [ТС]
Ага, как исправить я понял.
C++
1
2
3
4
5
6
7
8
9
10
11
cout<<"Vvedite nazvanie tovara: ";      //Vvod nazvaniya tovara
        cin.getline(InfoAboutProd[i].name, sizeof(InfoAboutProd[i].name));
        cout<<endl;
 
        cout<<"Vvedite stoimost "<<InfoAboutProd[i].name<<": ";        //Vvod stoimosti tovara
        (cin>>InfoAboutProd[i].cost).get();
        cout<<endl;
 
        cout<<"Vvedite stranu-proizvoditel' "<<InfoAboutProd[i].name<<": ";                 //Vvod proizvoditelya
        cin.getline(InfoAboutProd[i].couOfProd, sizeof(InfoAboutProd[i].couOfProd));
        cout<<endl;
Но вот про слэшэн я не понял. Там же вроде пере гэтлайн нет перевода на новую строку. Уж простите за дотошность, но хочется разобраться.
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 01:04
Лучший ответ Сообщение было отмечено Александр_Алекс как решение

Решение

Цитата Сообщение от Александр_Алекс Посмотреть сообщение
как исправить я понял.
Это все исправления? Как насчёт этого?
C++
1
cin>>pointer;
Добавлено через 1 минуту
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Там же вроде пере гэтлайн нет перевода на новую строку.
После ввода через cin >>, в потоке ввода остаётся '\n' (попадает туда при нажатии на Enter).
1
10 / 7 / 4
Регистрация: 08.12.2013
Сообщений: 165
28.02.2014, 13:12  [ТС]
Цитата Сообщение от alsav22 Посмотреть сообщение
Это все исправления? Как насчёт этого?
Код C++
1
cin>>pointer;
подправил, спасибо.

Цитата Сообщение от alsav22 Посмотреть сообщение
После ввода через cin >>, в потоке ввода остаётся '\n' (попадает туда при нажатии на Enter).
Вроде понял. А get() этот слэшэн считывает.

Спасибо!
0
5500 / 4895 / 831
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 19:28
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
слэшэн
Символ новой строки: управлющий символ, который перемещает позицию печати на одну строку вниз (в Windows состоит из двух символов: \r\n (13 и 10), в UNIX - из одного \n (10), в Mac OS - из одного \r (13)).
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
28.02.2014, 19:28
Помогаю со студенческими работами здесь

Компилятор пропускает цикл
Здравствуйте, в общем думаю однажды, когда нибудь, у всех такая проблема возникала. В общем в отладчике искал проблему и когда...

Компилятор пропускает строки кода
Начал писать морской бой но сталкнулся со сложность что компилятор пропускает строчки кода.Я начинающий програмист на c++. ...

Встроенные библиотеки и функции, которые не пропускает компилятор
Пытаюсь запустить код из книги. Но компилятор ругается на это #include &quot;std_lib_facilities.h&quot; и функцию keep_window_open(); Без...

Использование -> вместо . - почему компилятор пропускает этот случай?
node_t(const node_t&lt;T&gt;&amp; target) { init(target-&gt;value, target-&gt;ptr_next); } Почему использование -&gt; позволяется? Разве не должна...

В две строчки записать две цифры, а потом по закрытии программы и повторном открытии прочитать каждое число в отдельную переменную?
Как в с++ в две строчки записать две цифры, а потом по закрытии программы и повторном открытии прочитать каждое число в отдельную...


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

Или воспользуйтесь поиском по форуму:
14
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
igorrr37 13.02.2026
/ * Логарифм записывается как: (x-2)log(x^2+2) - означает логарифм (x^2+2) по основанию (x-2). Унарный минус обозначается как ! */ #include <iostream> #include <stack> #include <cctype>. . .
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу, и светлой Луне. В мире покоя нет и люди не могут жить в тишине. А жить им немного лет.
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила» «Время-Деньги» «Деньги -Пуля»
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru