我对c ++很新。我现在正在为结构和物体介绍课程。我们finnaly翻过文件,我有了写一个加密文本文件的程序的想法。只是为了我自己的快乐和知识(这不是功课)。我还没有编写加密,它将是私钥,因为我被告知这是最简单的,这是我第一次尝试这样的东西。无论如何,我现在只是将代码编写为函数以确保它们正常工作,然后将它们放入类中并扩展到程序中。所以,现在我的代码将打开并写入一个文件。我想在加密之前查看我刚刚在cmd窗口中写的文件,所以我知道我可以看到之前和之后。下面是代码:
//This program will create, store and encrypt a file for sending over the inernet
#include<iostream>
#include<cstdlib>
#include<iomanip>
#include<string>
#include<fstream>
#include"fileSelect.h"
using namespace std;
void openFile(fstream &);
void readFile(fstream &);
int main() {
//output file stream
fstream outputStream;
fstream inputStream;
string fileName, line;
openFile(outputStream);
readFile(inputStream);
system("pause");
return 0;
}
//open file Def
void openFile(fstream &fout){
string fileName;
char ch;
cout<<"Enter the name of the file to open: ";
getline(cin, fileName);
//try to open the file for writing
fout.open(fileName.c_str(),ios::out);
if(fout.fail()){
cout<<"File, "<<fileName<<" failed to open.\n";
exit(1);
}
cout<<"Enter your message to encrypt. End message with '&':\n";
cin.get(ch);
while(ch!='.'){
fout.put(ch);
cin.get(ch);
}
fout.close();
return;
}
void readFile(fstream &fin){
string fileName, line;
cout<<endl;
cout<<"Enter the name of the file to open: ";
getline(cin, fileName);
//check file is good
if(fin.fail()){
cout<<"File "<<fileName<<" failed to open.\n";
exit(1);
}
cout<<"Opening "<<"'"<<fileName<<"'" <<endl;
//cout<<"Enter the file to open: ";
//cin>>fileName;
fin.open(fileName.c_str(),ios::in);
//readFile(inputStream);
if(fin){
//read in data
getline(fin,line);
while(fin){
cout<<line<<endl;
getline(fin,line);
}
fin.close();
}
else{
cout<<"Error displaying file.\n";
}
return ;
}
这将编译并运行。如果注释掉openFile()并且自己调用readFile()函数,则该文件将读取openFile()中写入的内容。它就像我想要的那样一个接一个地做。它可能只是一个我想念的简单修复,但它现在变得有点头疼。任何帮助都会被贬低。 谢谢。
答案 0 :(得分:1)
当您阅读要加密的邮件时,您不会使用换行符。换行符仍保留在输入缓冲区中,并会导致getline(cin, fileName);
读取空fileName
。
阅读完消息后,您必须先跳过换行符
string tmp;
getline(cin, tmp);
然后getline()
中的readFile
将正常运作。
OT :
您的提示说
cout<<"Enter your message to encrypt. End message with '&':\n";
但您要测试的是.
而不是&
while(ch!='.'){
您将fstream
传递给openFile
和readFile
,但打开并关闭这些功能中的文件。您可以改用局部变量。
而不是
void openFile(fstream &fout){
...
fout.open(fileName.c_str(),ios::out);
你写了
void openFile(){
...
fstream fout;
fout.open(fileName.c_str(),ios::out);
甚至更短
void openFile(){
...
ofstream fout(fileName.c_str());
此外,您必须更改openFile()
的声明和电话。
readFile
和fin
/ ifstream
正常工作。