|
|
|
| Всем привет!
Ситуация следующая, не срабатывает 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];
char* Rus(const char* text);
char* Rus(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:10)
| | проблема решена,
спасибо за внимание,
если у кого, такая же проблема, то перед строкой, где не срабатывает cin.getline
вставьте следующий код:
и будет вам счастье! | |
|
|
|
|
|
|
|
для: shtirlitz
(15.11.2008 в 11:59)
| | спасибо за информацю | |
|
|
|
|
|
|
|
для: AlMag
(15.11.2008 в 23:08)
| | Ого... Спасибо! :)
А то я недавно как раз долго не знал что и предпринять... Весь инет облазил, но так и не понял!
Проблема была в том, что после
у меня не работала
Хотя то же самое происходило и со
если после него было что то наподобие
Но если их поменять местами, то все работало нормально...
Теперь все решено! Еще раз спасибо! xD RESPECT | |
|
|
|