基本输入/输出C ++错误

时间:2011-12-06 11:33:30

标签: c++ text-files ofstream

我想要的只是一个c ++程序,它将读取一个txt文件,将每一行放入一个数组中,然后将一个副本打印到另一个txt文件中。这是我的代码......

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

int main ()
{
        string STRING ="";
        string list[10000];
        int i = 0;
    ifstream infile;
    infile.open ("C:/Users/Ryan/Desktop/data.txt");
      ofstream myfile;
  myfile.open ("C:/Users/Ryan/Desktop/data-2.txt");

        while(!infile.eof()) // To get you all the lines.
        {
            getline(infile,STRING);
            list[i]=STRING;
            myfile<<list[i];
            ++i;
        }


    infile.close();
  myfile.close();

  return 0;
}

出于某种原因,尽管如此,每一行都给了我一堆时髦的中国符号。这是我的data.txt ...

BPC 20101206    V   0.13    0.13    0.13    0
BPC 20101207    V   0.13    0.13    0.13    6500
BPC 20101208    V   0.13    0.13    0.13    0
BPC 20101209    V   0.13    0.125   0.125   117000
BPC 20101210    V   0.125   0.125   0.125   0
BPC 20101213    V   0.125   0.125   0.125   0
BPC 20101214    V   0.13    0.13    0.13    5000
BPC 20101215    V   0.13    0.13    0.13    290
BPC 20101216    V   0.125   0.115   0.115   24000

这是输出数据-2.txt ...

BPC 20101206    V   0.13    0.13    0.13    0
䈀倀䌀ऀ㈀ ㄀ ㄀㈀ 㜀ऀ嘀ऀ ⸀㄀㌀ऀ ⸀㄀㌀ऀ ⸀㄀㌀ऀ㘀㔀  ഀ BPC 20101208    V   0.13    0.13    0.13    0
䈀倀䌀ऀ㈀ ㄀ ㄀㈀ 㤀ऀ嘀ऀ ⸀㄀㌀ऀ ⸀㄀㈀㔀ऀ ⸀㄀㈀㔀ऀ㄀㄀㜀   ഀ BPC 20101210    V   0.125   0.125   0.125   0
䈀倀䌀ऀ㈀ ㄀ ㄀㈀㄀㌀ऀ嘀ऀ ⸀㄀㈀㔀ऀ ⸀㄀㈀㔀ऀ ⸀㄀㈀㔀ऀ ഀ BPC 20101214    V   0.13    0.13    0.13    5000
䈀倀䌀ऀ㈀ ㄀ ㄀㈀㄀㔀ऀ嘀ऀ ⸀㄀㌀ऀ ⸀㄀㌀ऀ ⸀㄀㌀ऀ㈀㤀 ഀ BPC  20101216    V   0.125   0.115   0.115   24000

有什么想法吗?

4 个答案:

答案 0 :(得分:4)

要解决您的原始问题,您似乎正在输出一些未格式化的字符(恰好是中文)。我没有看到你插入新行(但输出中似乎有新的行)所以你的代码中缺少一些你没有向我们展示的东西。 请剪切/粘贴真实代码

  1. 什么是真正的代码。
  2. 如何从文件生成输出(是否在编辑器中打开它?)
  3. 需要注意的一点是:

    永远不要这样做:

       while(!infile.eof())
    

    在使用之前,您应该阅读并测试线路 这可以通过将读取放入条件来完成:

        while(getline(infile,STRING))
        {
            list[i]=STRING;
            myfile<<list[i];
            ++i;
        }
    

    需要注意的其他事项:

    1. 很好地格式化代码!!!!!!
    2. 不要使用全部大写标识符(这些通常是为宏保留的)。
    3. 不要使用数组。请改用std :: vector。
    4. 在一行中声明并打开文件

      ifstream infile("C:/Users/Ryan/Desktop/data.txt");
      
    5. 不要测试EOF作为循环路径。

      • 如果还有其他问题,可能会导致无限循环。
      • 如果您没有检查读取的工作情况,那么请重复处理最后一行。
    6. 不要手动关闭文件(让析构函数执行)

答案 1 :(得分:3)

如果我没弄错,你的操作系统是Windows?

这些“中文”符号的原因是您的.txt文件是用Unicode编码的。在记事本中单击“另存为”,然后在“编码”下拉列表(对话框底部的某个位置)中选择ANSI,然后保存。这应该解决“中国”问题:)

检查其他答案以解决代码问题。希望有所帮助。

答案 2 :(得分:1)

当您回写数据时,您不包括换行符,因此如果您打算这样做,则不会创建重复的文件。

似乎没有理由拥有List []数组,因为你无论如何直接写回来,而不是你可以做

getline(infile,STRING);
myfile << STRING << endl;  

btw STRING不是一个好的变量名,请选择更具描述性的内容。

答案 3 :(得分:1)

这篇文章详细介绍了while(!eof)... here

的替代方法