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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 12, средняя оценка - 4.58
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
#1

cin.getline и cin.ignore - C++

16.09.2013, 21:38. Просмотров 1792. Ответов 5
Метки нет (Все метки)

Есть кусок кода в котором не могу разобраться. Если cin.ignore() есть, то теряется первый вводимый символ начиная со второго входа в for. Если cin.ignore() убрать, то игнорирует первую строку вовсе и ввод начинается со второй. Хотелось бы разобраться.
C++
1
2
3
4
5
6
7
8
9
10
11
int k;
    cout << "Enter the number of rows\t"; 
    cin >> k;                               
    for (int i=1; i<=k; i++)                
    { 
        cout << i <<":"<<" ";
        cin.ignore();
        cin.getline(St[i].sList, 20); 
        cout << "\n";
        fwrite ((char*)St[i].sList, sizeof(St[i].sList), 1, file); 
    }
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
16.09.2013, 21:38     cin.getline и cin.ignore
Посмотрите здесь:

Друзья getline и cin.ignore - C++
Постараюсь как можно более точно обрисовать проблему. Имеется string * v1 = new string; string * v2 = new string; string * v3 = new...

Не работает getline(cin,s), istream.ignore() - C++
Использую microsoft visual c++ 6.0. не работает: string s; getline(cin,s);//дважды приходиться жать ентер При использовании...

cin.ignore - C++
Как работает эта функция? cin.ignore (1, '#');

Избавиться от cin.ignore() - C++
Приветствую всех! Написал простенькую программку для работы с классами. #include &quot;stdafx.h&quot; #include &lt;iostream&gt; using std::cout;...

Что делает cin.ignore(); - C++
Поясните мне, какое действие выполняет функция: cin.ignore(); Лучше на примере каком нибудь!(с комментариями) Может быть это что-то...

Как работает Cin.ignore() - C++
Дочитал до главы &quot;Потоки и файлы&quot; и с первого примера началось не понимание. Вот пример: #include &lt;iostream&gt; using namespace...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 21:51     cin.getline и cin.ignore #2
C++
1
2
3
4
5
6
7
8
9
10
11
int k;
    cout << "Enter the number of rows\t"; 
    (cin >> k).get();                               
    for (int i=1; i<=k; i++)                
    { 
        cout << i <<":"<<" ";
        //cin.ignore();
        cin.getline(St[i].sList, 20); 
        cout << "\n";
        fwrite ((char*)St[i].sList, sizeof(St[i].sList), 1, file); 
    }
Добавлено через 3 минуты
Вот в этом уверены?
C++
1
for (int i=1; i<=k; i++)
Первый индекс массива 0. Eсли размер массива равен k, то если сделать i <= k, то будет выход за границу массива.
Может так?
C++
1
for (int i=0; i<k; i++)
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
16.09.2013, 22:10  [ТС]     cin.getline и cin.ignore #3
Кстати да. Спасибо. )

Добавлено через 13 минут
Проблему решил cin.ignore() вынес за for)
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 22:19     cin.getline и cin.ignore #4
Цитата Сообщение от saserlend Посмотреть сообщение
Проблему решил cin.ignore() вынес за for)
Без cin.ignore() никак? Или мой код не смотрели? Это - делает то же самое:
C++
1
(cin >> k).get();
saserlend
11 / 11 / 1
Регистрация: 25.11.2011
Сообщений: 145
16.09.2013, 22:31  [ТС]     cin.getline и cin.ignore #5
Цитата Сообщение от alsav22 Посмотреть сообщение
Без cin.ignore() никак? Или мой код не смотрели? Это - делает то же самое:
C++
1
(cin >> k).get();
Ну я попробовал и все получилось. Но меня после вашего сообщения как будто осенило. В любом случае спасибо. Хотя есть еще вопрос. При записи в файл все в строку сохраняет и игнорирует '\n' . Ну это так для красоты нужно)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.09.2013, 22:46     cin.getline и cin.ignore
Еще ссылки по теме:

Что делает метод cin.ignore? - C++
cin.ignore(0,'\n'); Что она делает?

Исправить код, вызывающий cin.ignore(numeric_limits<streamsize>::max()) - C++
Возможно многие знают что если использовать библиотеку windows.h, и функцию cin.ignore(numeric_limits&lt;streamsize&gt;::max(), '\n'); выдаётся...

Проблема с 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...


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

Или воспользуйтесь поиском по форуму:
alsav22
5416 / 4812 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
16.09.2013, 22:46     cin.getline и cin.ignore #6
Цитата Сообщение от saserlend Посмотреть сообщение
При записи в файл все в строку сохраняет и игнорирует '\n' .
Вы в бинарном режиме пишите, поэтому красота в файле не нужна. Если файл пишется в бинарном режиме, то не для того, чтобы его потом смотреть в блокноте. Если добавлять '\n' вручную, то потом будут лишние сложности при чтении из файла. Но если очень хочется, можно, после записи строки, вручную добавить '\n' в файл.
Yandex
Объявления
16.09.2013, 22:46     cin.getline и cin.ignore
Ответ Создать тему
Опции темы

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