1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
1

Не могу ввести в cin

14.02.2018, 21:59. Показов 1754. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
const int arsize = 50;
 
int main()
{
    struct bop
    {
        char fullname[arsize];
        char tittle[arsize];
        char bopname[arsize];
        int preference;
    };
    bop var;
    cin.ignore();
    cin>>var.fullname[arsize];
    cin.ignore();
    cin>>var.tittle[arsize];
    cin.ignore();
    cin>>var.bopname[arsize];
    cin.ignore();
Проблема заключается в следующем:
Я ввожу в первый cin, во второй, ноооооо........ (драматическая пауза) в третий вообще даже не запрашивает ввод, а попросту игнорирует, будто и не писал я эту строку в код. Надеюсь достаточно корректно задал вопрос, просто уже поздновато...
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
14.02.2018, 21:59
Ответы с готовыми решениями:

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

Защита от дурака при вводе текста с помощью: cin.get cin.clear cin.sync
Доброго времени суток. На С++ учусь с недавних пор. Имеется стандартная &quot;защита от дурака&quot; на ввод....

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

Не могу понять почему не могу считать символьный ряд через cin.getline
Не могу понять почему не могу считать символьный ряд через cin.getline.Помогите позязя. #define ...

16
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
14.02.2018, 22:06 2
Цитата Сообщение от xKore_Nano_Man Посмотреть сообщение
C++
1
cin>>var.fullname[arsize];
для начала
C++
1
cin>>var.fullname;//[arsize];
А потом: вы с пробелами вводите?
0
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:10  [ТС] 3
Без пробелов.

Добавлено через 1 минуту
Когда я ввожу вот таким вот образом:

C++
1
cin>>var.fullname;//[arsize];
Выдает ошибку....
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:10 4
Цитата Сообщение от xKore_Nano_Man Посмотреть сообщение
C++
1
cin>>var.fullname[arsize];
А зачем вы при вводе написали [arsize] вы же вводите один символ. Так и задумано?
0
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:12  [ТС] 5
Нет, я ввожу не один символ в переменные fullname, tittle, bopname.
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:14 6
Да, слишком долго набирал и думал.

Добавлено через 2 минуты
Цитата Сообщение от xKore_Nano_Man Посмотреть сообщение
Нет, я ввожу не один символ
Фактически вы вводите один символ. Вы же предъявили для ввода переменную типа char.
0
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:14  [ТС] 7
Если поможет, то полностью моя программа выглядит следующим образом: (пытаюсь сделать задание из учебника)

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
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
const int arsize = 50;
 
int main()
{
    struct bop
    {
        char fullname[arsize];
        char tittle[arsize];
        char bopname[arsize];
        int preference;
    };
    bop var;
    cin.ignore();
    cin>>var.fullname[arsize];
    cin.ignore();
    cin>>var.tittle[arsize];
    cin.ignore();
    cin>>var.bopname[arsize];
    cin.ignore();
    cout<<"                      Welcome\n\n\n";
    cout<<"How you want to login in system?\n\n";
    cout<<"a) Name                    b) Rang\n";
    cout<<"c) Secret name             d) Exit\n";
    char choice;
    cin>>choice;
    switch (choice)
        {
            case 'a':
                {
                    cout<<var.fullname;
                    break;
                }
            case 'b':
                {
                    cout<<var.tittle;
                    break;
                }
            case 'c':
                {
                    cout<<var.bopname;
                    break;
                }
            defaul:
                cout<<"Impossible letter\n";
        }
}
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:18 8
Цитата Сообщение от xKore_Nano_Man Посмотреть сообщение
Выдает ошибку....
Кто и какую ошибку выдает. Компилятор, операционная система, какая диагностика?

Добавлено через 3 минуты
Кроме того, указав [arsize] вы шлепаете результат ввода мимо массива и попадаете на байт следующий после переменной. Ведь последний элемент массива имеет индекс [arsize-1].
0
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
14.02.2018, 22:20 9
Цитата Сообщение от palva Посмотреть сообщение
Кто и какую ошибку выдает
out of range, остальное-то вроде ничего

Добавлено через 1 минуту
Цитата Сообщение от palva Посмотреть сообщение
последний элемент массива имеет индекс [arsize-1]
+ ,в данном случае нужно отметить, что его тоже не стоит трогать ('\0')
0
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:23  [ТС] 10
Извиняюсь, я понял, что попросту стоит убрать в cin [arsize], но вот следующая проблема, когда я ввожу любые слова в эти cin ( без пробелов ) и выбираю например 'a' ( в самом switch уже ) мне выводит вместо того слова, что я написал - бред. Не могли бы вы мне тут также помочь?
0
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
14.02.2018, 22:26 11
xKore_Nano_Man,
Кликните здесь для просмотра всего текста
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
#include <iostream>
#include <cstring>
#include <windows.h>
using namespace std;
const int arsize = 50;
 
    struct bop
    {
        char fullname[arsize];
        char tittle[arsize];
        char bopname[arsize];
        int preference;
    };
 
int main()
{
 
    bop var;
 
    cin>>var.fullname;
 
    cin>>var.tittle;
 
    cin>>var.bopname;
 
    cout<<"                      Welcome\n\n\n";
    cout<<"How you want to login in system?\n\n";
    cout<<"a) Name                    b) Rang\n";
    cout<<"c) Secret name             d) Exit\n";
    char choice;
    cin>>choice;
    switch (choice)
        {
            case 'a':
                {
                    cout<<var.fullname;
                    break;
                }
            case 'b':
                {
                    cout<<var.tittle;
                    break;
                }
            case 'c':
                {
                    cout<<var.bopname;
                    break;
                }
            defaul:
                cout<<"Impossible letter\n";
        }
 
    //system("pause");
}
1
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:31  [ТС] 12
Угу, я вот только, что заметил что при вводе слова "goose" в первую переменную, позже при её выводе на экран у меня показывает слово верно, но вот только без первой буквы: "oose".

Добавлено через 2 минуты
Не знаете ли как вот это решить?

Добавлено через 1 минуту
Сделать так, чтобы можно было ввести goose и оно вывело goose а не как в моем случае. ( я понимаю, что можно попросту ввести ggoose, но все - таки было бы интересно узнать как исправить данную проблему, что бы можно было не париться удваиванием первой буквы )
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:35 13
Ну вы же первую букву проигнорировали. ignore в начале вы зачем написали?
0
299 / 208 / 174
Регистрация: 11.05.2016
Сообщений: 655
14.02.2018, 22:36 14
Цитата Сообщение от xKore_Nano_Man Посмотреть сообщение
Не знаете ли как вот это решить?
C++
1
 cin.ignore();
убрали?
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:40 15
Только последний ignore можно как-то оправдать.
0
1 / 1 / 0
Регистрация: 30.12.2017
Сообщений: 101
14.02.2018, 22:43  [ТС] 16
Просто ужас!!! Как стыдно) Я попросту новичок в этой сфере и один молодой человек в примерной проблеме, когда cin не вводится посоветовал вставить cin.ignore(), и тогда это помогло! Т.К я в книге ещё до этой темы не дошел - не знал что это такое! Спасибо огромное, Вам, за потраченное время на тупые объяснения для меня!)
0
4236 / 2933 / 687
Регистрация: 08.06.2007
Сообщений: 9,814
Записей в блоге: 4
14.02.2018, 22:52 17
Последний ignore нужен, поскольку после ввода последнего слова ваш ввод застрянет на символе после слова. Обычно это символ '\n' его надо пропустить, чтобы дальше ввести символ для switch. Но если вы после последнего слова ввели пробел, а потом Enter, то ignore не поможет.

Добавлено через 3 минуты
Если ignore не будет, то в переменную для switch попадет символ '\n' или что у вас там будет после последнего слова.
0
14.02.2018, 22:52
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
14.02.2018, 22:52
Помогаю со студенческими работами здесь

Можно ли в cin ввести строку любого размера?
Собственно можно ли в cin ввести строку неопределенного размера, пользуясь только char * ?...

Как с помощью cin ввести нуль терминированную строку?
Как с помощью cin ввести &quot;законченную&quot; строчку, имеется в виду символ ноль. таким образов не...

Как ввести несколько переменных через пробел (std::cin)?
Как ввести несколько переменных через пробел?

Можно ли ввести с помощью std::cin значения элементов двух массивов?
Скажите можно ли вести с помощью cin два массива? Я начал вот делать, но почему то водится только...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru