为什么Visual C ++中的我的语言翻译程序会覆盖一个没有任何内容而不是翻译的文件

时间:2016-04-16 21:06:39

标签: c++ visual-studio fstream

我已经开发了一个程序,用于将英语单词翻译成我的母语。一切正常,没有错误,除了我没有得到所需的输出。  程序向用户询问输入文件,其中有英文单词,然后它将读取文件并将我的母语翻译写入用户指定的输出文件。我的问题是程序没有写任何输出文件。我甚至选择了一个非空的输出文件,但我所看到和理解的是该程序没有任何东西覆盖输出文件中的所有内容。   请在这困难的时候请求别人的帮助,因为我已经筋疲力尽了。

以下是完整的程序:

#define _CRT_SECURE_NO_WARNINGS
#include <stdio.h >
#include <conio.h>
#include <iomanip>
#include <cctype>
#include <ctype.h>
#include <stdlib.h>
#include <string>
#include <iostream>
#include <fstream>
using namespace std;


string Identifier;
ofstream outfile;
ifstream  infile;
static string fname1, fname2;
char a = (char)infile.get();

void Display(){
outfile << "Nuna";
}
void gettok(){
Identifier = "";
 if (isalnum(a)) { // identifier: [a-zA-Z][a-zA-Z0-9]*
    Identifier = a;
    while (isalnum(a = (char)infile.get()))
         Identifier += a;
    while (isspace(a = (char)infile.get())){
         if (Identifier == "Display"){
            Display();
            a = (char)infile.get();
          }
       }
    }
    }
  int main(){

  cout << "Enter name of the file to be translated ";
  cin >> fname1;
  cout << "Enter new file name";
  cin >> fname2;
  infile.open(fname1);
  if (infile.fail())
  {
    cerr << " No such a file Exist";

    exit(1);

   }
   outfile.open(fname2);
   if (outfile.fail())
   {
    cerr << "Unable to create a file";

    exit(1);
   }
  while (!infile.eof())
  {
    gettok();
  }
  infile.close();
  outfile.close();

  }







     Thank you sir, @TimStraubinger for your guide.

1。首先,根据我对Display()函数的定义,我只想让程序以这样的方式,每当英文单词 在输入文件中读取显示,然后调用Display()函数,其作用是将单词display的翻译作为“Nuna”写入输出文件。我希望有一个翻译每个英语单词的功能,就像我对“显示”一词所做的那样。但如果有更好的方法,请帮助我。 2.我使用了“char a =(char)infile.get()”,因为我想将“a”声明为全局变量,以便我所有的函数都知道并使用,而且,我无法打开文件。 “主功能。所以,我搜索并想办法,但都失败了!   欢迎任何人的帮助!

1 个答案:

答案 0 :(得分:1)

这有很多问题,这是我的主要建议。首先,您的代码难以阅读和混淆,并且违反了许多良好的惯例。我建议您使用C ++学习一些教科书示例,并学习如何更好地组织代码,以便我们更好地为您提供帮助。至于你的代码,一些更明显的问题如下:

char a = (char)infile.get()

在这里,您尝试在打开文件之前访问该文件。这需要在infile打开后调用。

要查看写入文件的内容,您必须具备以下条件:

if (Identifier == "Display"){ Display(); a = (char)infile.get(); }

为什么累加器字符串Identifier需要存储"Display"才能向文件写入内容? (我强烈建议您为Display()找到一个更好的函数名称,这表示您正在向屏幕写一些内容。)此外,在while (isspace(a = (char)infile.get()))循环内,infile.get()将每次调用两次循环,一次检查循环条件,一次因为你另外写了它。这将导致在该循环中跳过所有其他字符。