Форум программистов, компьютерный форум, киберфорум
Наши страницы

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 379, средняя оценка - 4.95
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
#1

Объект cin и его метод cin.get() - C++

08.05.2009, 17:22. Просмотров 48575. Ответов 9
Метки нет (Все метки)

Вот код программы:
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
#include <iostream.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
    char a[256];
    char b[256];
 
    cout << "Enter string a: ";
    cin.get(a,256);
    cout << "\na: " << a << "\n";
 
    cout << "\nEnter string b: ";
    cin >> b;
    cout << "\nb: " << b << "\n";
 
    int j;
    cin >> j;
 
    return 0;
}
Когда я первый раз ввожу строку с пробелами, она отображается полностью, ну так в принципе и должно быть. А вот когда я ввожу вторую строку, тоже с пробелами, программка вылетает, хотя должно отобразиться хотя бы первое слово!!!
Может кто знает почему???
Заранее спасибо!
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2009, 17:22
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Объект cin и его метод cin.get() (C++):

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

Метод getline(cin, m) не срабатывает без cin.ignore() / Ревью кода - C++
Почему в моем случае getline(cin, m) не срабатывает без cin.ignore() ? Если по коду есть какие-нибудь замечания, то просьба написать что не...

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

Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами - C++
Нужна помощь. Задача продемонстрировать различие между вводом с помощью cin.get и cin.getline с тремя параметрами, как из потока достать...

Для чего в код вводится cin.ignore после того, как cin>> уже сработало? - C++
Доброго времени суток! Просматриваю простой код. Вводится строка типа string: фунты и дюймы Затем значения переводится в типы int и...

Отличие функции cin.get и cin.getline - C++
Добрый день! Изучаю функции get и getline, сказано, что они отличаются тем, что функция get считывает символ разрыва строк и оставляет...

9
stolyars
10 / 10 / 1
Регистрация: 24.12.2008
Сообщений: 32
08.05.2009, 18:36 #2
C++
1
cin >> b;
мож так ...
C++
1
 cin.get(b,256);
Добавлено через 21 минуту 44 секунды
не так не катит...однак первое слово строки 2 показывает если добавить
C++
1
using namespace std
проверил на VS2008
1
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
08.05.2009, 18:45  [ТС] #3
Да спасибо )) Но я хотел бы знать почему именно не отображается хотя бы первое слово, а не решение этой проблемы.

Добавлено через 3 минуты 34 секунды
Если например во второй массив (b) я ввожу только одно слово, то оно отображается, а вот если уже второе слово через пробел, то все конец ). Хотя по идее, она так не должна завершаться...

Добавлено через 4 минуты 34 секунды
Это выглядит так: ввожу для а: Hello world для b: World результат такой
a: Hello world
b: World

A вот если так: а: Hello world , для b: World is beautiful то все...ничего нет.
0
stolyars
10 / 10 / 1
Регистрация: 24.12.2008
Сообщений: 32
08.05.2009, 18:46 #4
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
#include <iostream>
#include<stdlib.h>
#pragma hdrstop
using namespace std;
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
        char a[256];
        char b[256];
 
        cout << "Enter string a: ";
        cin.get(a,256);
        cout << "\na: " << a << "\n";
        fflush(stdin);//очистка буффера<---
        cout << "\nEnter string b: ";
        cin.get(b,256);
        cout << "\nb: " << b << "\n";
 
        int j;
        cin >> j;
 
       system("pause");
}
так пашет у меня...
1
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
08.05.2009, 19:06  [ТС] #5
Можно конечно еще использовать и cin.getline()...Тоже поможет... )

Добавлено через 17 минут 27 секунд
Еще чтобы решить этот вопрос можно использовать метод cin.ignore(). Я его вставил после cin>>b перед cout. И тогда в b начало оставаться первое слово. Но я все равно до конца не понял почему cin прерывает программу если в b вводить слова с пробелами ((
0
kazak
3048 / 2369 / 160
Регистрация: 11.03.2009
Сообщений: 5,436
Завершенные тесты: 1
09.05.2009, 06:39 #6
Цитата Сообщение от Alexandr_LN Посмотреть сообщение
Когда я первый раз ввожу строку с пробелами, она отображается полностью, ну так в принципе и должно быть. А вот когда я ввожу вторую строку, тоже с пробелами, программка вылетает, хотя должно отобразиться хотя бы первое слово!!!
А ты первую строку сколько символов вводишь?

Добавлено через 5 минут 57 секунд
У меня твой пример работает.
1
#pragma
Временно недоступен
954 / 225 / 6
Регистрация: 12.04.2009
Сообщений: 921
10.05.2009, 06:09 #7
или просто cin.get(); перед return 0;

Добавлено через 8 минут 14 секунд
Цитата Сообщение от Alexandr_LN Посмотреть сообщение
Можно конечно еще использовать и cin.getline()...Тоже поможет... )

Добавлено через 17 минут 27 секунд
Еще чтобы решить этот вопрос можно использовать метод cin.ignore(). Я его вставил после cin>>b перед cout. И тогда в b начало оставаться первое слово. Но я все равно до конца не понял почему cin прерывает программу если в b вводить слова с пробелами ((
Это потому,что пробел внутри строки может быть прочитан только функцией cin.getline() внутри объекта cin.Объект cin читает ввод до пробела,по умолчанию символ пробела означает конец ввода и никакие символы после него не считываются.(Б.Страуструп,Язык программирования С++,стр.87)

Добавлено через 1 час 0 минут 25 секунд
Это потому,что пробел внутри строки может быть прочитан только функцией cin.getline() внутри объекта cin. Ну или как ты использовал,cin.get() с параметрами тоже читает пробелы.Но лучше cin.getline() всё таки.Она именно для этого.
1
Tiphon
24.05.2010, 21:27 #8
Извините за некропост, меня этот пост тоже заинтересовал.
По сути cin это лишь буфер(временое хранилище) в который складывается вся читаемая строка, и пока она не пуста ты не сможешь считывать новые даные в этот буфер.

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
#include <iostream.h>
#pragma hdrstop
 
//---------------------------------------------------------------------------
 
#pragma argsused
int main()
{
        char a[256];
        char b[256];
 
        cout << "Enter string a: ";
        cin.get(a,256);            // считал строку "Hello world"
        cout << "\na: " << a << "\n";  // вывел строку "Hello world" (больше в буфере ни чего нет, можно читать дальше)
 
        cout << "\nEnter string b: ";
        cin >> b;               // считал строку "Hello world", положил в переменую char слово Hello и удалил пробел из буфера
        cout << "\nb: " << b << "\n";  // п  // вывел, то что лежит в переменой char
 
        int j;
        cin >> j;  // ты пытаешься считать оставшееся слово world в переменую типа int. Ошибка! Программа закрывается.
 
        return 0;
}
Чтоб исправить это, нужно почистить буфер, выведя все символы в какую-то другую переменую, либо очистить функцией fflush(stdin);
Somebody
2791 / 1602 / 147
Регистрация: 03.12.2007
Сообщений: 4,199
Завершенные тесты: 1
24.05.2010, 23:26 #9
Цитата Сообщение от Tiphon Посмотреть сообщение
либо очистить функцией fflush(stdin);
Programming languages — C
fflush
Description
2 If stream points to an output stream or an update stream in which the most recent
operation was not input, the fflush function causes any unwritten data for that stream
to be delivered to the host environment to be written to the file; otherwise, the behavior is
undefined
.
3 If stream is a null pointer, the fflush function performs this flushing action on all
streams for which the behavior is defined above.
0
Sura
6 / 6 / 0
Регистрация: 23.05.2010
Сообщений: 87
25.05.2010, 00:23 #10
заинтересовал меня этот случай, но
Alexandr_LN,
У меня Ваш пример работает как положено ))
0
25.05.2010, 00:23
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2010, 00:23
Привет! Вот еще темы с ответами:

Объект cin - C++
Как сделать так,чтобы после cin шла строка,например есть строка cout &lt;&lt; &quot;Enter your height in futs and inchs:&quot;; cin &gt;&gt; futs &gt;&gt; inchs ...

объект cin - C++
Добрый день. скажите как попасть в ретерн, если поток идет с консоли? if(!cin.get(ch)) return curr_tok = END;

Объект cin - C++
Читаю книгу и встретил такой кусок кода: for(int i =0;i&lt;ArSize;i++) { cout&lt;&lt;i+1&lt;&lt;&quot;: &quot;; cin.get(temp,MaxLen); ...

Предопределенный объект cin - C++
В классе iostream перегружена операция приведения объекта к типу bool? int x; while (cin &gt;&gt; x) ...


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

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

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