【问题标题】:Program Almost Runs ,Trouble With File Operation程序几乎运行,文件操作出现问题
【发布时间】:2015-05-23 03:24:58
【问题描述】:

程序几乎可以运行,但我不知道如何为此制作 .txt 文件,它不会给我一个错误。

项目要求我:

" 文件加密是将文件内容写入密码的科学。您的加密程序应该像过滤器一样工作,读取一个文件的内容,修改 将数据写入代码,然后将编码内容写入第二个文件。

第二个文件将是第一个文件的一个版本,但用密码编写。尽管有复杂的加密技术,但您应该想出一个自己的简单技术。例如,您可以一次读取第一个文件一个字符,然后将每个字符的 ASCII 码加 10,然后再将其写入第二个文件。 "

#include <iostream>
#include <fstream>
using namespace std;

int main()
{
    char ch;
    fstream fin, fout;
    fin.open("testone.txt", ios::in);
    fout.open("encrypted.txt", ios::out);

    while (!fin.eof())
    {
        fin.get(ch);
        fout.put(ch + 10);
    }

    fin.close();
    fout.close();
    system("pause");
    return 0;
}

【问题讨论】:

  • 不确定您的问题。你得到输出文件了吗?
  • 它给了我 (errorLNK1561),它告诉我必须定义入口点,但我不确定到底是什么问题,我将文件与程序放在同一个位置,并且名称正确跨度>
  • 当你写代码的时候,试着从简单到复杂。 HelloWorld 有效吗?从文件中读取单个字符并将其写入屏幕的代码怎么样?将硬编码字符写入文件的代码怎么样?小步骤。
  • 您在帖子中说它没有给我错误,但在上面的评论中说它给了我(errorLNK1561),哪个是它?您是否收到任何错误或只是没有写入文件?

标签: c++ visual-c++ operators


【解决方案1】:
【解决方案2】:

我的 Visual C 没有,但你可能需要#include &lt;cstdlib&gt; 才能获得system

LNK1561 表示找不到您的主要功能。显然 main 函数是存在的,所以这个应该编译。遵循 Beta 的建议,确保您可以编译和运行一个简单的程序。

抛开编译问题,这段代码不起作用。

总体问题:您没有在此过程中检查任何错误,因此您的程序无法判断是否有任何问题。

例如,如果文件没有打开怎么办? while (!fin.eof()) 变成一个无限循环。如果文件未打开,则永远无法读取 EOF。无论如何,尝试使用 EOF 作为循环条件是个坏主意。绝对是read the link in @Steephen's comment

如果您无法读取带有fin.get(ch); 的字符,那怎么办?当前代码无论如何都会尝试使用该字符。坏主意。

测试流非常简单。 if (!fin) 完成这项工作。阅读流如何工作以了解原因。 Thius 简单测试并不能告诉您出了什么问题,但至少您知道出了什么问题。

为了让事情变得更简单,大多数流函数都返回流。这使您可以将流操作链接在一起,并使if (!fin.get(ch)) 成为判断get 是否有效的简单方法。

所以你的 IO 循环可以像

一样简单
while (fin.get(ch) && fout.put(ch + 10))
{
}

如果get 因任何原因无法获得ch——未打开的文件、文件结尾、不可读的文件——则while 循环退出。之后您可以查询fin 找出原因。如果EOF,太棒了。如果不是 EOF,则输出文件可能是错误的。

这同样适用于put。如果put 失败,则循环结束。测试原因并决定是否要保留该文件。

我还建议在 main 的末尾删除一个快速测试以打印出一张支票。

fin.open("encrypted.txt", ios::in);
while (fin.get(ch) && std::cout.put(ch - 10))
{
}

更好的测试是读取字符、撤消加密并与原始输入进行比较。

【讨论】:

    猜你喜欢
    • 2018-08-11
    • 2013-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-09-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多