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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 379, средняя оценка - 4.95
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
08.05.2009, 17:22     Объект cin и его метод cin.get() #1
Вот код программы:
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;
}
Когда я первый раз ввожу строку с пробелами, она отображается полностью, ну так в принципе и должно быть. А вот когда я ввожу вторую строку, тоже с пробелами, программка вылетает, хотя должно отобразиться хотя бы первое слово!!!
Может кто знает почему???
Заранее спасибо!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.05.2009, 17:22     Объект cin и его метод cin.get()
Посмотрите здесь:

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

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

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

A вот если так: а: Hello world , для b: World is beautiful то все...ничего нет.
stolyars
10 / 10 / 1
Регистрация: 24.12.2008
Сообщений: 32
08.05.2009, 18:46     Объект cin и его метод cin.get() #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");
}
так пашет у меня...
Alexandr_LN
1 / 1 / 0
Регистрация: 28.04.2009
Сообщений: 116
08.05.2009, 19:06  [ТС]     Объект cin и его метод cin.get() #5
Можно конечно еще использовать и cin.getline()...Тоже поможет... )

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

Добавлено через 5 минут 57 секунд
У меня твой пример работает.
#pragma
Временно недоступен
 Аватар для #pragma
952 / 223 / 6
Регистрация: 12.04.2009
Сообщений: 921
10.05.2009, 06:09     Объект cin и его метод cin.get() #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() всё таки.Она именно для этого.
Tiphon
Сообщений: n/a
24.05.2010, 21:27     Объект cin и его метод cin.get() #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
2770 / 1583 / 141
Регистрация: 03.12.2007
Сообщений: 4,139
Завершенные тесты: 1
24.05.2010, 23:26     Объект cin и его метод cin.get() #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.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.05.2010, 00:23     Объект cin и его метод cin.get()
Еще ссылки по теме:

C++ Cin вместо cin.getline
C++ Продемонстрировать различие между вводом с помощью cin.Get и cin.Getline с тремя параметрами
C++ Объясните пожалуйста как работают cin.good(), cin.sync(), cin.clear()

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

Или воспользуйтесь поиском по форуму:
Sura
 Аватар для Sura
6 / 6 / 0
Регистрация: 23.05.2010
Сообщений: 87
25.05.2010, 00:23     Объект cin и его метод cin.get() #10
заинтересовал меня этот случай, но
Alexandr_LN,
У меня Ваш пример работает как положено ))
Yandex
Объявления
25.05.2010, 00:23     Объект cin и его метод cin.get()
Ответ Создать тему
Опции темы

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