Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

After running the program Enter 1 to encrypt, 2 to decrypt: 1 Enter name of your

ID: 3639121 • Letter: A

Question

After running the program
Enter 1 to encrypt, 2 to decrypt: 1
Enter name of your file to encrypt: input.txt
input file did not open please check it
CMD.EXE was started with the above path as the current directory.
UMC paths are not suppoted. Defaulting to Windows directory.


#include <iostream>
#include <fstream>
#include <string>
using namespace std;
void mapitE(string,char[]);
void mapitD(string,char[]);
void encryptdecrypt(const string,const char[],int,string&);
int main()
{string ende[]={"encrypt","decrypt"},buffer,key,newbuffer="";
char filename[80],enmap[128],demap[128],again;
int i,maplength;
ofstream out;
ifstream in;
int choice;
do
{
cout<<"Enter 1 to encrypt, 2 to decrypt: ";
cin>>choice;
while(choice<1||choice>2)
{cout<<"invalid choice ";
cout<<"Enter 1 to encrypt, 2 to decrypt: ";
cin>>choice;
}

cout<<"Enter name of your file to "<<ende[choice-1]<<": ";
cin>>filename;
in.open(filename);
if(in.fail())
{ cout<<"input file did not open please check it ";
system("pause");
return 1;
}

cout<<"Enter name of your output file: ";
cin>>filename;
out.open(filename);
cout<<"Enter your encryption key (max 128 characters): ";
cin>>key;
if(key.length()>128)
{cout<<"key too long ";
cout<<"Enter your encryption key (max 128 characters): ";
cin>>key;
}
maplength=key.length();

if(choice==1)
mapitE(key,enmap);
else
mapitD(key,demap);
getline(in,buffer);
while(in)
{
if(choice==1)
encryptdecrypt(buffer,enmap,maplength,newbuffer);
else
encryptdecrypt(buffer,demap,maplength,newbuffer);
out<<newbuffer;
newbuffer.erase(0);
getline(in,buffer);

}
out.close();
in.close();
in.clear();
out.clear();
newbuffer.erase(0);
cout<<"do it again(y/n)? ";
cin>>again;
}while(toupper(again)=='Y');
return 0;
}
void encryptdecrypt(const string buffer,const char map[],int len,string& newbuffer)
{int i=0;
char t,code;
for(i=0;i<buffer.length();i++)
{ //cout<<buffer[i]<<" "<<i<<endl;
if(isalpha(buffer[i]))
{if(islower(buffer[i]))
code='a';
else
code='A';
t=buffer[i]-code;
//cout<<code<<" "<<buffer[i]<<" "<<t<<" "<<i<<endl;
t=t+map[i%len];
t=t%26;
t=t+code;
newbuffer.push_back(t);
}

else
newbuffer.push_back(buffer[i]);
}
newbuffer.push_back(' ');
}
void mapitE(string key,char map[])
{
int i;
for(i=0;i<key.length();i++)
map[i]=key[i]-'a';
}
void mapitD(string key,char map[])
{
int i;
for(i=0;i<key.length();i++)
map[i]=26-(key[i]-'a');
}

Explanation / Answer

cout<<"Enter name of your file to "<<ende[choice-1]<<": ";
cin>>filename;
in.open(filename);
if(in.fail())
{ cout<<"input file did not open please check it ";
system("pause");
return 1;
}

The above part can be replaced by :
(do not declare in variable before)
cout<<"Enter name of your file to "<<ende[choice-1]<<": ";
cin>>filename;
ifstream in("filename");
if(!in)
{
cout<<"input file did not open please check it ";
system("pause");
return 1;
}
else
{
cout << "File is successfully opened" << endl;
}