gpt4 book ai didi

c++ - 文件未显示在 cmd 提示窗口中

转载 作者:行者123 更新时间:2023-11-28 07:39:42 24 4
gpt4 key购买 nike

我对 C++ 还很陌生。我正在上一门介绍结构和对象的类(class)。我们最终检查了文件,我想到了编写一个加密文本文件的程序。只是为了我自己的乐趣和知识(这不是家庭作业)。我还没有编写加密,它将是私钥,因为有人告诉我这是最简单的,这是我第一次尝试这样的事情。无论如何,我现在只是将代码编写为函数以确保它们可以正常工作,然后稍后将它们放入类中并扩展程序。所以,现在我的代码将打开并写入一个文件。我想在加密之前在 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()中写入的内容。它只是不会像我想要的那样一个接一个地做。这可能只是我缺少的一个简单修复,但现在它变得有点令人头疼。任何帮助将不胜感激。谢谢。

最佳答案

当您读取要加密的消息时,您不会使用换行符。换行符保留在输入缓冲区中并将导致 getline(cin, fileName); 读取一个空的 fileName

阅读消息后必须先跳过换行符

string tmp;
getline(cin, tmp);

然后readFile中的getline()就可以正常工作了。

OT:

  • 你的提示说

    cout<<"Enter your message to encrypt. End message with '&':\n";

    但是你测试的是 . 而不是 &

    while(ch!='.'){
  • 您将 fstream 传递给 openFilereadFile,但在这些函数中打开和关闭文件。您可以改用局部变量。

    代替

    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() 的声明和调用。

    readFilefin/ifstream适本地工作。

关于c++ - 文件未显示在 cmd 提示窗口中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16099344/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com