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

Basic Input/Output C++ Error

本文关键字:c++ 错误 输出 输入      更新时间:2023-10-16

我想要的是一个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

这里是输出data-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

任何想法?

为了解决您最初的问题,看起来您正在输出一些未格式化的字符(碰巧是中文)。我没有看到你插入新行(但似乎有新的行在输出),所以有一些东西从你的代码中缺失,你没有向我们展示。请剪切/粘贴真实代码

  1. 实际代码是什么
  2. 如何从文件中生成输出(是否在编辑器中打开它)?

主要注意事项:

千万不要这样做:

   while(!infile.eof())

在使用这一行之前,你应该阅读和测试它。
这可以在一行中完成,方法是将read放入条件中:

    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作为环路条件。

    • 如果有其他问题,可能会导致无限循环。
    • 如果你没有检查读取工作,那么你重复上一行的处理。
    • 不要手动关闭文件(让析构函数来做)

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

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

    检查其他答案以修复代码中的问题。

    当你写回数据时,你没有包括换行符,所以你不会创建一个重复的文件,如果这是你的意图。

    似乎没有理由使用List[]数组,因为您无论如何都要直接将其写回来,相反,您可以使用

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

    btw STRING不是一个好的变量名,选择一个更有描述性的

    这是一篇很好的文章,详细介绍了while(!eof)的替代方法…