A little Encryption / Decryption Program !

Hello all , Today I tried to make a little Encryption / Decryption program that its en/decryption depends on an array of numbers (repeated when the last element of it is reached )
What ever the problem is With Switch , If & getline function !! because when I remove them it works great !!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
#include <iostream>
#include <string>
using namespace std;
void encrypt(char a[],int x);
void decrypt ( char b[],int x);
	string texttest ;
	char *a;
	

  
void textinput()
{
	
getline(cin, texttest);
a=new char[texttest.size()+1];
a[texttest.size()]=0;
memcpy(a,texttest.c_str(),texttest.size());
	
}

int main ()
{
	
	int choice;
	cout<<"Choose 1 to encrypt , 2 to decrypt";
	cin>>choice;
	
	if(choice ==1){
	cout<<"Enter a message to encrypt : ";
	textinput();
	encrypt(a,texttest.size());}
	else if(choice ==2)
	{	cout<<"Enter a message to encrypt : ";
	textinput();
	decrypt(a,texttest.size());}
	else cout<<"Run The app again";


	
	
	system("PAUSE") ;
  return 0;
}
void encrypt ( char b[],int x)
{int num;
int keyindex;
int key [3] = {1,2,3};
for (num=0 ,keyindex=0 ; num<x;num++,keyindex++)
  {
	if(keyindex==3)
keyindex=0;
	
b[num]= b[num]+ key[keyindex];
cout<<b[num];


  }
}
void decrypt ( char b[],int x)
{int num;
int keyindex;
int key [3] = {1,2,3};
for (num=0 ,keyindex=0 ; num<x;num++,keyindex++)
{if(keyindex==3)
keyindex=0;
	b[num]= b[num]- key[keyindex];
cout<<b[num];
}


}

My first code trial !! didn't work !!
Would any one Help me , Please ??
It has been two days since i posted and no answers ??? Please give me a hand here !!
You haven't said what's wrong, and the formatting of the code is horrid. The driver doesn't give any result you can see, so assuming it compiles, I don't know how you'd know whether it worked or not.

Please read http://www.cplusplus.com/forum/beginner/1/
Particularly the "When you ask" portion.

Sorry my mistake !!
When I compile the code above , it skips the getline statement
and here is the result


Choose 1 to encrypt , 2 to decrypt1
Enter a message to encrypt : Press any key to continue . . .


but when I remove the conditional if it works greatly like that
1
2
3
4
5
6
7
8
9
10
int main ()
{
	
	
	cout<<"Enter a message to encrypt : ";
	textinput();
	encrypt(a   ,   texttest.size()  ); ;
	system("PAUSE") ;
  return 0;
}



and here is the result after removing the conditional If

Enter a message to encrypt : my name
n{#ocpf // this is the encrypted msg!
Press any key to continue . . .


And about the format it looks okay for me !! I don't know why u see it's horrid :)
And Thanks for help !!
You use cin to extract an int from the stream. When you do this (maybe by typing in the equivalent of "1\n") the 1 is extracted, but the newline remains in the stream. So, when you get to textinput() there is a dangling newline waiting to feed your getline().

One solution would be to change textinput() to resemble the following:

1
2
3
4
5
6
7
8
9
10
11
void textinput()
{
	if ( cin.peek() == '\n' )
		cin.get() ;

	getline(cin, texttest);

	a=new char[texttest.size()+1];
	a[texttest.size()]=0;
	memcpy(a,texttest.c_str(),texttest.size());
}


Btw, Dqgf"lt"kptujdoz"iptpbvwff1
Last edited on
Thanks dude it works now , although I didn't understand the use of cin.peek() ( I will search it later I have to go to maths lecture now ) !!
And about the Formatting I will try to reformat it :):)
Topic archived. No new replies allowed.