Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 04.03.2011, 01:08   #1
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию 20 строк ввели меня в ступор

Никак не могу понять в чем проблема.
Код:
#include <iostream>
#include <stdio.h>
 
using namespace std;
 
struct test
{
    char szTest[23];
    int year;
} ;
main ()
{
    test lol[256];
 
    for( int i = 0;i<10;i++)
    {
    cin.getline(lol[i].szTest,23);
    cin>>lol[i].year;
    cout<<lol[i].szTest<<endl<<lol[i].year<<endl<<endl;
    }
}
Почему так ужасно считывает?
Изображения
Тип файла: jpg Снимок.JPG (47.8 Кб, 158 просмотров)
erro вне форума Ответить с цитированием
Старый 04.03.2011, 09:10   #2
Mandrivnyk
Software Developer
Участник клуба
 
Аватар для Mandrivnyk
 
Регистрация: 01.03.2011
Сообщений: 1,098
По умолчанию

попробуй вставить после cin.getline

Код:
cin.ignore(23, '\n');
Болтовня ничего не стоит. Покажите мне код. (c) Linus Torvalds
Помог ответ? -- Поставьте отзыв.
Выражения особой благодарности в рублевом эквиваленте отправлять сюда --> R269634919062
Mandrivnyk вне форума Ответить с цитированием
Старый 04.03.2011, 13:51   #3
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Кстати данный вопрос очень даже актуальный. Встречал его на многих форумах, как на русскоязычных так и на американских. Советуют после использовании getline(), очищать входной поток вызовом ignore().
Например:
Код:
    for( int i = 0;i<10;i++)
    {
    cin.getline(lol[i].szTest,23);
    cin>>lol[i].year;
    cout<<lol[i].szTest<<endl<<lol[i].year<<endl<<endl;
    cin.ignore();
    }
Есть просто свои особенности работы функций get и getline.

Последний раз редактировалось profi; 04.03.2011 в 14:01.
profi вне форума Ответить с цитированием
Старый 04.03.2011, 14:30   #4
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

Цитата:
Сообщение от Mandrivnyk Посмотреть сообщение
попробуй вставить после cin.getline

Код:
cin.ignore(23, '\n');
Удивительно ,
А почему же тогда эта дура с gets не работает тоже?
erro вне форума Ответить с цитированием
Старый 04.03.2011, 14:33   #5
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

gets не имеет отношения к cin
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Старый 04.03.2011, 14:52   #6
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

Вы не поняли, если я перепишу код на С
Код:
#include <stdio.h>


struct test
{
    char szTest[23];
    int year;
} ;
main ()
{
    test lol[256];

    for( int i = 0;i<10;i+=1)
    {
    gets(lol[i].szTest);
    scanf("%d",&lol[i].year);
    printf("\n %s\n %d\n -%d-\n",lol[i].szTest,lol[i].year,i);
    }
}
работать не будет. Для gets() тоже необходимо входной поток очищать?
erro вне форума Ответить с цитированием
Старый 04.03.2011, 14:56   #7
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

erro у тебя со зрением все в порядке? В посте №3 я кажется правильный ответ написал. Для Си используй fflush(stdin); - очистка буфера.
profi вне форума Ответить с цитированием
Старый 04.03.2011, 15:01   #8
erro
Пользователь
 
Регистрация: 14.11.2010
Сообщений: 11
По умолчанию

при чем здесь зрение, с С++ все понятно, я просто хотел узнать надо ли буфер в С чистить
erro вне форума Ответить с цитированием
Старый 04.03.2011, 15:02   #9
profi
Участник клуба Подтвердите свой е-майл
 
Регистрация: 19.11.2007
Сообщений: 1,022
По умолчанию

Желательно.
profi вне форума Ответить с цитированием
Старый 04.03.2011, 15:02   #10
Пепел Феникса
Старожил
 
Аватар для Пепел Феникса
 
Регистрация: 28.01.2009
Сообщений: 21,000
По умолчанию

а проверить не проще чем спрашивать?
Хорошо поставленный вопрос это уже половина ответа. | Каков вопрос, таков ответ.
Программа делает то что написал программист, а не то что он хотел.
Функции/утилиты ждут в параметрах то что им надо, а не то что вы хотите.
Пепел Феникса вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как сделать автозаполнение строк, которые зависят от строк другого столбца путвфда_иил Microsoft Office Excel 19 29.08.2010 17:16
Только начал - и сразу ступор JeyKip Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 1 28.02.2010 17:07
Ступор в repeat ... until Vol666 Общие вопросы Delphi 18 09.11.2009 22:05
Ступор с компилятором Алукард Интеграл Общие вопросы C/C++ 1 11.11.2008 17:33