首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >读取文本文件的输出是重复的C++文件处理

读取文本文件的输出是重复的C++文件处理
EN

Stack Overflow用户
提问于 2022-06-20 13:25:08
回答 1查看 96关注 0票数 0

我想读取我的文本文件,并输出它与输入完全一样,但问题是,它们是重复的!号码是1或0

我的c++代码

代码语言:javascript
复制
#include <iostream>
#include <fstream>
#include <string>
using namespace std;

int n, count, size = 10;
string name, ID, stamina, plusmode, type;

int main ()
{
    ifstream data;
    data.open("cards2.txt");
        
        while (data)
        {
            data >> n;
            getline (data, name, '\t');
            getline (data, ID, '\t');
            getline (data, stamina, '\t');
            getline (data, plusmode, '\t');
            getline (data, type, '\t');
            
       for (count = 1; count <= 10; count++)
            {
              cout << n << " " << name << " " << ID << " " << stamina << " " << plusmode << " " << type << endl;  
      }
        }
}

我的txt文件

代码语言:javascript
复制
1   Abyss Devolos   F0647       Balance NA  SpeedStorm
2   Ace Dragon      E7609       Attack  NA  HyperSphere
3   Anubion A2      E1057       Defense NA  Dual-Layer
4   Balar B4        E4726       Attack  NA  SlingShock
5   Crystal Dranzer F0217       Balance NA  Burst
6   Cyclone Belfyre F3965       Stamina Attack  QuadDrive
7   Dark-X Nepstrius    E4749       Defense NA  SlingShock
8   Diomedes D2     E1062       Attack  NA  Dual-Layer
9   Doomscizor      E1033       Attack  NA  SwitchStrike
10  Vatryek Wing Accel  B9492   Attack  NA  Burst

我的终端输出

代码语言:javascript
复制
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
1  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance
0  Abyss Devolos F0647  Balance

请帮帮我。我不知道如何使它不再重复

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2022-06-21 07:55:23

下面是一些读取和打印数据文件的代码。我假设您的数据是由制表符分隔的,这就是您的初始代码所暗示的,但是您没有显式地说明任何地方。

代码语言:javascript
复制
int main()
{
    ...
    int n;
    string name, ID, stamina, plusmode, type;
    while (data >> n) // continue reading until no more numbers
    {
        data.ignore(); // skip the tab immediately after the number
        getline(data, name, '\t');
        getline(data, ID, '\t');
        getline(data, stamina, '\t');
        getline(data, plusmode, '\t');
        getline(data, type, '\n'); // last data item is terminated by \n
        cout << n << " " << name << " " << ID << " " << stamina << " " << plusmode << " " << type << endl;
    }
}

您的原始代码犯了两个错误(我用注释说明了这一点)。

第一个错误是,在读取了第一列中的数字之后,您没有意识到下一个字符是一个选项卡。您希望忽略该选项卡,以便开始阅读下一列。这就是data.ignore()所做的,它忽略了输入中的下一个字符。

第二个错误是,您的代码没有反映type列不是由选项卡终止,而是由换行符结束,所以getline(data, type, '\t');是错误的,应该是getline(data, type, '\n');

这两个错误都是一个例子,说明您没有仔细考虑输入是什么,以及您编写的代码是做什么的。你需要精确的思考。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/72687797

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档