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

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

Войти
Регистрация
Восстановить пароль
 
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
27.02.2014, 23:07     Компилятор пропускает две строчки #1
Здравствуйте!
Вкратце о задании: нужно создать структуру, с помощью которой будет вводится информация о товаре.
Два элемента структуры строковые (название товара и страна-производитель). Первый вводится и везде отображается без проблем. А вот ввод второго просто пропускается, и последующая за ним строчка тоже.
(Строки 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/2014-0...m0t659in5n.png
Миниатюры
Компилятор пропускает две строчки  
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
27.02.2014, 23:07     Компилятор пропускает две строчки
Посмотрите здесь:

компилятор пропускает строчки с инициализацией C++
Как переставить две строчки матрицы не используя цикла? C++
C++ Как связаны эти две строчки?
C++ Как правильно засунуть две строчки в код программы?(
Подправить две строчки в задаче C++
C++ Как сравниеть две строчки std string не учитывая геристр букв?
C++ В две строчки записать две цифры, а потом по закрытии программы и повторном открытии прочитать каждое число в отдельную переменную?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:27     Компилятор пропускает две строчки #2
Везде, где ввод через cin >>:
C++
1
(cin>>InfoAboutProd[i].cost).get();
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
27.02.2014, 23:35  [ТС]     Компилятор пропускает две строчки #3
Цитата Сообщение от 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"."
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
27.02.2014, 23:58     Компилятор пропускает две строчки #4
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
вот так нужно сделать?
Везде, где есть ввод через cin>>.
Исправленный код покажите.
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
28.02.2014, 00:08  [ТС]     Компилятор пропускает две строчки #5
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;
}
Вот код. Все чудненько работает. Можете объяснить эту строчку?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:14     Компилятор пропускает две строчки #6
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
cin>>pointer;
А здесь?

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

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

Добавлено через 34 секунды
Я разве говорил getline() убрать?
Цитата Сообщение от alsav22 Посмотреть сообщение
Везде, где ввод через cin >>:
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
28.02.2014, 00:32  [ТС]     Компилятор пропускает две строчки #9
Ну, и понимаю чем cin от getline отличается. Убирать не говорили. Куда тогда вставлять эту строку? И все же, что это значит?
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 00:42     Компилятор пропускает две строчки #10
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Куда тогда вставлять эту строку?
Эту - это какую? Я вам привёл пример конструкции, которую нужно использовать, в вашем коде, при вводе через 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' из потока ввода.
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
28.02.2014, 00:58  [ТС]     Компилятор пропускает две строчки #11
Ага, как исправить я понял.
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;
Но вот про слэшэн я не понял. Там же вроде пере гэтлайн нет перевода на новую строку. Уж простите за дотошность, но хочется разобраться.
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 01:04     Компилятор пропускает две строчки #12
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
как исправить я понял.
Это все исправления? Как насчёт этого?
C++
1
cin>>pointer;
Добавлено через 1 минуту
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
Там же вроде пере гэтлайн нет перевода на новую строку.
После ввода через cin >>, в потоке ввода остаётся '\n' (попадает туда при нажатии на Enter).
Александр_Алекс
4 / 1 / 1
Регистрация: 08.12.2013
Сообщений: 138
28.02.2014, 13:12  [ТС]     Компилятор пропускает две строчки #13
Цитата Сообщение от alsav22 Посмотреть сообщение
Это все исправления? Как насчёт этого?
Код C++
1
cin>>pointer;
подправил, спасибо.

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

Спасибо!
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
28.02.2014, 19:28     Компилятор пропускает две строчки
Еще ссылки по теме:

Объясните две строчки кода C++
Компилятор пропускает цикл C++
Нужно записать две строчки через указатель, не используя адрес C++
C++ Компилятор пропускает цикл
C++ Отладчик пропускает else if

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

Или воспользуйтесь поиском по форуму:
alsav22
5284 / 4803 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
28.02.2014, 19:28     Компилятор пропускает две строчки #14
Цитата Сообщение от Александр_Алекс Посмотреть сообщение
слэшэн
Символ новой строки: управлющий символ, который перемещает позицию печати на одну строку вниз (в Windows состоит из двух символов: \r\n (13 и 10), в UNIX - из одного \n (10), в Mac OS - из одного \r (13)).
Yandex
Объявления
28.02.2014, 19:28     Компилятор пропускает две строчки
Ответ Создать тему
Опции темы

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