Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Нужна помощь проблемы с cin.getline


Автор: kresh 26.1.2008, 00:36
Не пойму в чем дело использую два подряд   cin.getline, причем если при первом использовании  cin.getline ввожу символов больше заданного программа перепрыгивает через второй  cin.getline и считает что я там ничего не ввел
Код

char Game()
{ 
  char g1[6],g2[6];
  SumGuessg1=0;
  SumGuessg2=0;
     int x;
        
        for(x=0;x<2;x++){    

         if(x==0){strcpy(g1,name_gamer1),strcpy(g2,name_gamer2);}else {strcpy(g1,name_gamer2),strcpy(g2,name_gamer1);}
    cout<<endl<<Rus("")<<g1;

cin.sync();//ОЧИСТКА БУФЕРА

cout<<Rus("-загадывает 10 символов=  "); 
 cin.sync();//ОЧИСТКА БУФЕРА   
        cin.getline(txt, 11);
         cin.sync();//ОЧИСТКА БУФЕРА 
        cout<<endl<<Rus("")<<g2;
cout<<Rus("\n-угадывает 10 символов="); 

        cin.sync();//ОЧИСТКА БУФЕРА
        cin.getline(txt2,11);

//сравнение введенных символов///////////////////////////////////////////////////////////
        
        
        for (int i=0;i<10;i++){
            if (txt[i]!=txt2[i])continue;else {if (x==0)SumGuessg1++;else SumGuessg2++;}}
             
//////////////////////////////////////////////////////////////////////////////////////////
        cout<<endl<<Rus("---------------------Текущий счет----------------------------------");

        
cout<<                  "\n"<<name_gamer1<<"="<<SumGuessg1;

cout<<                  "\n"<<name_gamer2<<"="<<SumGuessg2;}
        

return 0;}

Автор: archimed7592 26.1.2008, 00:49
Здесь была похожая проблема: http://forum.vingrad.ru/index.php?show_type=forum&showtopic=186107&view=all

Автор: JackYF 26.1.2008, 00:50
kresh, видишь ли, пользователь вводит данные так, как он хочет, необязательно пооператорно. То есть один "физический" ввод пользователя может растянуться на бесконечное множество операторов ввода в твоей программе. Поэтому дай пользователю волю, при этом константы ввода сделав просто побольше - порядка 64-256.

Добавлено через 2 минуты и 43 секунды
Фчёрт, сам решил и сам забыл :(. Попробуй, как замечено по ссылке archimed7592а, 
Код

cin.ignore();


Автор: kresh 26.1.2008, 00:54
Спасибо за ответы,решил проблему используя  

cin.clear();// очистить ошибочное состояние потока

Код

char Game()
{ 
  char g1[6],g2[6];
  SumGuessg1=0;
  SumGuessg2=0;
     int x;
        
        for(x=0;x<2;x++){    

         if(x==0){strcpy(g1,name_gamer1),strcpy(g2,name_gamer2);}else {strcpy(g1,name_gamer2),strcpy(g2,name_gamer1);}
    cout<<endl<<Rus("")<<g1;

cin.sync();//ОЧИСТКА БУФЕРА

cout<<Rus("-загадывает 10 символов=  "); 
 cin.sync();//ОЧИСТКА БУФЕРА   
        cin.getline(txt, 11);
         cin.sync();//ОЧИСТКА БУФЕРА +
         cin.clear();// очистить ошибочное состояние потока
        cout<<endl<<Rus("")<<g2;
cout<<Rus("\n-угадывает 10 символов="); 

        cin.sync();//ОЧИСТКА БУФЕРА
        cin.getline(txt2,11);
        cin.clear();// очистить ошибочное состояние потока
//сравнение введенных символов///////////////////////////////////////////////////////////
        
        
        for (int i=0;i<10;i++){
            if (txt[i]!=txt2[i])continue;else {if (x==0)SumGuessg1++;else SumGuessg2++;}}
             
//////////////////////////////////////////////////////////////////////////////////////////
        cout<<endl<<Rus("---------------------Текущий счет----------------------------------");

        
cout<<                  "\n"<<name_gamer1<<"="<<SumGuessg1;

cout<<                  "\n"<<name_gamer2<<"="<<SumGuessg2;}
        

return 0;}




 smile 

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)