我在头文件中有我的原型,但我需要一些帮助。我在整个程序编译过程中遇到了一些麻烦。它似乎陷入了输入的循环中。可能是功能的一些问题。提前感谢任何意见。
#include <iostream>
#include <conio.h>
#include "header.h"
#include <fstream>
class Caesar
{
public: void readText(char *input);
void encrypt(char *input,char *output,char *key);
void decrypt(char *input,char *output,char *key);
};
void main()
{
Caesar a;
char key[1000];
ifstream fin;
int choice;
char input[100],output[100];
cout<<"\n Enter input file: ";
cin>>input;
cout << input;
cout<<"\n Enter output file: ";
cin>>output;
cout <<output;
cout<<"\n Enter key: ";
cin>>key;
cout <<key;
cout<<"\n\n 1. Encrypt\n 2. Decrypt\n\n Select choice(1 or 2): "<< endl;
cin >> choice;
cout << choice;
a.readText(input);
if(choice==1)
{
a.encrypt(input,output,key);
}
if(choice==2)
{
a.decrypt(input,output,key);
}
else
{
cout<<"\n\n Unknown choice";
}
}
void Caesar::readText(char *input)
{
ifstream reader;
char buf;
reader.open(input);
cout<<"\n\n <--- "<<input<<" --->\n";
buf=reader.get();
while(!reader.eof())
{
cout<<buf;
buf=reader.get();
}
reader.close();
}
void Caesar::encrypt(char *input,char *output,char *key)
{
ifstream reader;
ofstream writer;
char buf;
reader.open(input);
writer.open(output);
buf=reader.get();
while(!reader.eof())
{
if(buf>='a'&&buf<='z')
{
buf-='a';
buf+=key[buf];
buf%=26;
buf+='A';
}
writer.put(buf);
buf=reader.get();
}
reader.close();
writer.close();
readText(input);
readText(output);
}
void Caesar::decrypt(char *input,char *output,char *key)
{
ifstream reader;
ofstream writer;
char buf;
reader.open(input);
writer.open(output);
buf=reader.get();
while(!reader.eof())
{
if(buf>='A'&&buf<='Z')
{
buf-='A';
buf+=26-key[buf];
buf%=26;
buf+='a';
}
writer.put(buf);
buf=reader.get();
}
reader.close();
writer.close();
readText(input);
readText(output);
}
答案 0 :(得分:0)
if(choice=1)
应该是
if(choice==1)
以及其他if
在您的情况下,您要将值1
分配给choice
,然后测试choice
是否为true
,它是,因为任何非零数字类型隐含地投放到bool
true
。
答案 1 :(得分:0)
我刚刚执行了您的代码,并尝试对其进行调试并进行了屏幕截图
你输入选择后程序进入循环。cin>>
没有问题。
答案 2 :(得分:0)
从您的评论中,您似乎只是想尝试调试main。一切似乎都很好。你输入什么钥匙?如果它是一个非常大的整数,那可能是你的问题,因为它可能超过最大整数范围并导致溢出。
您的密钥是整数变量。您正在输入包含密钥的文件名的字符串,因此应将其更改为C字符串数组。将所有传递的关键参数更改为char *而不是int。
调用readText()函数时,你有一个无限循环。
也许试试这个:
void Caesar::readText(char *input)
{
ifstream reader(input);
if(reader.is_open())
{
char buf;
cout<<"\n\n <--- "<<input<<" --->\n";
while(reader.get(buf))
{
cout << buf;
}
}
reader.close();
}
确保您的文本文件与代码位于同一文件夹中。有关详细信息,请参阅此处:ifstream not opening file