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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
tarkys
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6
#1

cin.getline() - C++

22.02.2013, 20:44. Просмотров 670. Ответов 3
Метки нет (Все метки)

Вопрос заключается в следующем, собственно программа отказывается выполнять cin.getline(... , ...); (... - аргументы) в начале своей функции, если не написть эту строку дважды, грубо говоря он игнорит первый син.гетлайн(). Я был бы благодарен за решение этой проблемки xD
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
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
#include<iostream>
 
using namespace std;
 
struct phonebook{
        char Name[11];
        char Surname[21];
        char Phone [13];
    };
    phonebook mas[20];
 
int add(void)
{
    char Phone [13];
    char Name [11];
    char Surname [21];
    cout<<"Enter Name"<<endl;
    cin.getline(Name,11);// собственно вот
    cin.getline(Name,11);
    cout<<"Enter Surname"<<endl;
    cin.getline(Surname,20);
    cout<<"Enter Phone"<<endl;
    cin.getline(Phone,13);
    for(int i=0; i<strlen(Phone); i++)
        if(isdigit(Phone[i])==0)
            return 1;
    for(int i=0; i<20; i++)
    {
        if(mas[i].Phone[0]==0)
        {
            strcpy(mas[i].Phone,Phone);
            strcpy(mas[i].Name,Name);
            strcpy(mas[i].Surname,Surname);
            return 0;
        }
    }
    return 1;
}
 
int del(void)
{
    cout<<"Enter Phone Number"<<endl;
    char temp[13];
    cin.getline(temp,13);//та же фигня
    cin.getline(temp,13);
    for(int i=0;i<20;i++)
    {
        if(strcmp(temp,mas[i].Phone)==0)
        {
            strcpy(mas[i].Name,"none");
            strcpy(mas[i].Phone,"none");
            strcpy(mas[i].Surname,"none");
            cout<<"done"<<endl;
        }
        return 0;
    }
    return 1;
}
 
int search(void)
{
    cout<<"Enter Phone Number"<<endl;
    char temp[13];
    cin.getline(temp,13);// и опять
    cin.getline(temp,13);
    for(int i=0;i<20;i++)
    {
        if(strcmp(temp,mas[i].Phone)==0)
        {
            cout<<mas[i].Phone<<" "<<mas[i].Name<<" "<<mas[i].Surname<<endl;
        }
    }
    return 1;
}
 
int output(void)
{
    //cout<<"Name\tSurname\t\tPhone\n";
    for(int i=0; i<20; i++)
    {
        cout<<mas[i].Name<<"\t"<<mas[i].Surname<<"\t"<<mas[i].Phone<<endl;
    }
    return 1;
}
 
int menu (void)
{
    m1:cout<<"1-ADD\n2-DEL\n3-SEARCH\n4-SHOW\n5-EXIT"<<endl;
    cout<<"Input Field ";
    char mn;
    cin.sync();
    cin.clear();
    cin>>mn;
    switch(mn)
    {
    case '1': 
        system("cls");
        add();
        goto m1;
        break;
    case '2':
        system("cls");
        del();
        goto m1;
        break;
    case '3':
        system("cls");
        search();
        goto m1;
        break;
    case '4':
        system("cls");
        output();
        goto m1;
    case '5':
        return 0;
        break;
    default:
        system("cls");
        cout<<"Your IQ below 60, plz try again"<<endl;
        goto m1;
    }
}
 
int main()
{
    do
    {
        //char e[6];
        char e;
        bool f=false;
        system("cls");
        cout<<"type <<q>> to exit, any another input charecter"/*or character set*/" = enter menu"<<endl;
        cin.sync();
        cin.clear();
        //cin.getline(e,5);
        cin>>e;
        //if(strcmp(e,"exit")==0)
        if(e=='q')
            return 0;   
        else
        {
            system("cls");
            menu();
            f=true;
        }
    }while(true);
    cin.get();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
22.02.2013, 20:44     cin.getline()
Посмотрите здесь:

Проблема с cin.getline(); - C++
Есть вопрос по поводу использования cin.getline() после cin: cin&gt;&gt; n; char c; cin.getline(c, buf); Почему можно ввести...

Пропускается cin.getline - C++
Здравствуйте. Функция поиска void search() { char str; int arr_1, arr_2,col_rezult = 0; int on_name = 0; int on_autor =...

Setlocal и cin.getline - C++
Привет Всем! У меня такая задачка. В начале программы setlocale(LC_ALL,&quot;rus&quot;) чтоб консоль русские буквы понимала, но по ходу программы мне...

cin.getline скушал - C++
Вот ставлю чтоб ввёл 5 строк а даёт только 4, съедает 1 строку самую первую как это починить? char **s = new char* ; for(int i = 0; i...

cin.getline() не выполняется - C++
В коде ниже не выполняется cin.getline(), просто пропускает и начинает выполнять следующую строку (0.png то что получается). form z; //...

Некорректная работа cin.getline() - C++
Доброго времени суток,господа знатоки. у меня есть двумерный массив char куда мне нужно записать строки и отсортировать но вот в чем...

Error C2664 в cin.getline() - C++
Всем привет.Пишу телефонную книгу в консоли ,при попытке заполнить поля структуры вылазит ряд ошибок ,типа error C2664:...

считывание строки cin.getline() - C++
То место, где нужно вводить фамилию, не работает, точнее, его просто пропускает :/ какие варианты решения проблемы подскажете? ...

cin.getline() не читает 1 символ - C++
Доброго времени суток :) пишу довольно простой код, но тут появилась проблема. Вот обрезаний кусок кода который не хочет работать...

Интересное поведение cin.getline(); - C++
Доброго времени суток! Я не устаю терроризировать форум своими тупыми вопросами, но для этого он и создан. На этот раз у меня проблема с...

Вопрос про cin.getline() - C++
char mas; cout&lt;&lt;&quot;Add Age &quot;; cin&gt;&gt;Age; cout&lt;&lt;&quot;Add Name &quot;; cin.getline(mas,20); Name = new char; strcpy(Name,...

cin.getline() не читает строку - C++
Добрый день. Нужно последовательно ввести 2 строки через cin.getline(), но после ввода первой, если она превышает допустимый размер, ввод...


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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
22.02.2013, 21:07     cin.getline() #2
После cin >> в меню, в потоке остаётся '\n'(попадает туда после нажатия Enter). Перед getline() его нужно убрать из потока, иначе getline() обработает его как пустую строку. Как вариант, перед getline() (или после cin >>) написать: cin.get();

Добавлено через 2 минуты
Ещё можно так использовать cin: (cin >> mn).get(); После этого в потоке '\n' не будет.
tarkys
0 / 0 / 0
Регистрация: 22.02.2013
Сообщений: 6
23.02.2013, 15:45  [ТС]     cin.getline() #3
Спасибо! xD

Добавлено через 18 часов 32 минуты
Найдено более рациональное решение, грубо говоря очистка всего буфера потока, а не одного символа(в случае с cin.get()), так как мало ли что юзер введет с клавиатуры.
C++
1
2
cin.clear();
cin.ignore(cin.rdbuf()->in_avail());
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
23.02.2013, 16:30     cin.getline() #4
Я бы дал этому другое название. Это не более рациональное решение для удаления одного символа из потока, а более продуманный код. Для этого случая мне больше нравится такое решение:
C++
1
2
cin.clear();
while (cin.get() != '\n');
И если идти дальше, в направлении продуманности кода, то нужно организовать в меню циклы, исключающие неверный ввод.
Yandex
Объявления
23.02.2013, 16:30     cin.getline()
Ответ Создать тему
Опции темы

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