Форум: Форум C++Разное
Новые темы: 00
PHP 5. На примерах. Авторы: Кузнецов М.В., Симдянов И.В., Голышев С.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. MySQL 5. В подлиннике. Авторы: Кузнецов М.В., Симдянов И.В. Программирование. Ступени успешной карьеры. Авторы: Кузнецов М.В., Симдянов И.В. Самоучитель MySQL 5. Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум C++

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: cin.getline не срабатывает
 
 автор: shtirlitz   (15.11.2008 в 11:10)   письмо автору
 
 

Всем привет!
Ситуация следующая, не срабатывает cin.getline, т.е. программа вместо того чтобы остановится, для ввода данных, просто переходит на следующую строку.
Но если убрать строки
cin.getline(q,2);
p=q[0]-'0';

и поставить

for (i=0; i<25; i++)
{
         if (key[0]==Alfa[i]) {p=i; break;}
}


т.е.определить p по некоторой формуле то все нормально работает.
Вопрос, как сделать так чтобы после ручнного ввода числа, cin.getline работал?
вся программа (шифрования цезаря с ключом) приведена ниже

#include <iostream.h>
#include <string.h>
#include <windows.h>

char bufRus[256];
charRus(const char* text);

charRus(const char* text)
{
      CharToOem(text, bufRus);
      return bufRus;
}
main()
{
char Alfa[25]={'a''b''c''d''e''f''g''h''i''j''k''l''m''o''p''q''r''s''t''u''v''w''x''y''z'} ;
char beta[25];
char key[25];
int k;
int p;
char q[2]; 
char A[1000];
int i=0, j=0, z=0;


cout<<Rus("Введите ключ:")<<endl;
cin.getline(key, 25);
//определение длины ключа
for (i=0; i<25; i++)
{
if (key[i]=='\0') {k=i; break;}
}
//вводим позицию начала записи ключа
cout<<Rus("Введите p: ")<<endl;

cin.getline(q,2);
p=q[0]-'0';

//определение позиции начала записи ключа

// for (i=0; i<25; i++)
// {
// if (key[0]==Alfa[i]) {p=i; break;}
// }

//записываем ключ в новый массив
for (i=p, j=0; i<p+k; i++, j++)
{
beta[i]=key[j];
}

//заполнение шифрованного масива остальными буквами после конца ключа
for (i=p+k, j=0; i<25; i++, j++)
{
for (z=0; z<k; z++)
if (Alfa[j]==key[z]) {j++; z=0;}
beta[i]=Alfa[j];
}

//заполнение шифрованного массива перед началом ключа
for (i=0, j=j-1; i<p; i++, j++)
{
for (z=0; z<k; z++)
if (Alfa[j]==key[z]) {j++; z=0;}
beta[i]=Alfa[j];
}

for (i=0; i<25; i++)
cout<<Alfa[i]<<" ";

cout<<endl;

for (i=0; i<25; i++)
cout<<beta[i]<<" ";
cout<<endl;

cout<<Rus("Введите строку для шифрования:")<<endl;

cin.getline(A,1000);

cout<<Rus("Зашифрованный текст")<<endl;
for (i=0; i<1000; i++)
{
if (A[i]=='\0'break;
if (A[i]==' 'continue;
for (j=0; j<25; j++)
{
if (A[i]==Alfa[j])
{
A[i]=beta[j];break;
}
}
}
for (i=0; i<1000; i++)
{
if (A[i]=='\0'break;
cout<<A[i];
}
cout<<endl;
return 0;
}

  Ответить  
 
 автор: shtirlitz   (15.11.2008 в 11:59)   письмо автору
 
   для: shtirlitz   (15.11.2008 в 11:10)
 

проблема решена,
спасибо за внимание,
если у кого, такая же проблема, то перед строкой, где не срабатывает cin.getline
вставьте следующий код:

cin.ignore(); 


и будет вам счастье!

  Ответить  
 
 автор: AlMag   (15.11.2008 в 23:08)   письмо автору
 
   для: shtirlitz   (15.11.2008 в 11:59)
 

спасибо за информацю

  Ответить  
 
 автор: StarWorm   (17.11.2008 в 03:07)   письмо автору
 
   для: AlMag   (15.11.2008 в 23:08)
 

Ого... Спасибо! :)
А то я недавно как раз долго не знал что и предпринять... Весь инет облазил, но так и не понял!
Проблема была в том, что после
cin>>variable

у меня не работала
cin.getline(str,255)


Хотя то же самое происходило и со
scanf(...)

если после него было что то наподобие
gets(...)


Но если их поменять местами, то все работало нормально...
Теперь все решено! Еще раз спасибо! xD RESPECT

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования