Форум С++

 

Ответить на сообщение

Вернуться к теме

Вы отвечаете на сообщение:

Автор: 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;
}


Ваше имя:

Пароль:

Цитировать

Используйте тэги для выделения текста:
Код: [code][/code]
Жирный: [b][/b]
Наклонный: [i][/i]
URL: [url][/url]

Сообщение:

Прикрепить: