如何在 C++ 中将文本文件输入转换为数组

Posted

技术标签:

【中文标题】如何在 C++ 中将文本文件输入转换为数组【英文标题】:How do i convert a text file input to an array in c++ 【发布时间】:2020-04-13 15:54:44 【问题描述】:

您好,我有一个格式为的文本文件 电话号码 门牌号码 名字 姓氏

我正在尝试读取所有数据并将其存储在一个数组中。我已经使用了下面的代码。但它只读取第一行数据。谁能帮助我为什么会这样。

#include <iostream>
#include <iomanip>
#include <fstream>
#include <string.h>
#define Size 200

unsigned long long int mobilenumber[Size];
char seatnumber[Size][4];
char firstname[Size][30],lastname[Size][30];

using namespace std;
int main()

    //delcares the files needed for input and output//
    ifstream infile;
    ofstream outfile;

    infile.open("reservations.txt",ios::in);
    //opens files needed for output//
    outfile.open("pricing.txt");
    int i=0;
    if (infile.is_open())
    
        infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
        i++;
        numberofbooking++;
    
    infile.close();
    for(int i=0;i<=numberofbooking;i++)
    
    cout<< mobilenumber[i]<<" "<< seatnumber[i]<<" "<< firstname[i]<<" "<< lastname[i];
    
return 0;

提前致谢

【问题讨论】:

你需要一个循环来读取比第一行更多的内容。而不是infile&gt;&gt; mobilenumber[i]&gt;&gt;seatnumber[i]&gt;&gt;firstname[i]&gt;&gt;lastname[i]; 你想要while (infile&gt;&gt; mobilenumber[i]&gt;&gt;seatnumber[i]&gt;&gt;firstname[i]&gt;&gt;lastname[i]) i++; numberofbooking++; 谢谢,成功了:) 我没有发布答案,因为这是一种非常常见的问题。我预计会有重复。 【参考方案1】:

它只读取一行数据的原因是因为这就是你告诉它要做的所有事情。这里:

...
 if (infile.is_open())
    
        infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i];
        i++;
        numberofbooking++;
    
...

这将运行一次,我认为你的意思是一个while循环:

while  (infile>> mobilenumber[i]>>seatnumber[i]>>firstname[i]>>lastname[i])
    

        i++;
        numberofbooking++;
    

只要0 &lt;= i &lt;= 199,这将做你想做的事,如果i 超出该范围,那么你将得到未定义的行为。

【讨论】:

【参考方案2】:

假设您的数据文件中的数据不超过 200 条,否则您的程序将失败。

您只从文件中读取一次,因此只获取第一行数据。 您需要从文件变红直到 EOF。在 if(infile.is_open()) 中添加一个 while 循环。阅读直到 EOF,如下所示。

if (infile.is_open())
        
            while (infile >> mobilenumber[i] >> seatnumber[i] >> firstname[i] >> lastname[i]) 
                cout << "Reading file" << endl;
                i++;
                numberofbooking++;
            
        

除了索引之外,我没有看到 i++ 的任何好处。我认为您也可以使用 numberofbooking 进行索引。

每当您遇到此类问题时,请尝试添加日志以检查正在发生的事情或使用调试器。希望这会对你有所帮助。

【讨论】:

@drescherjm 是有道理的。根据建议编辑。

以上是关于如何在 C++ 中将文本文件输入转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

在 C++ 中将某种结构化的文本文件读入数组

如何在Delphi中将诸如TMemo等文本控件的内容保存为TXT文件?

如何在Android Studio中将Pdf文件转换为文本

如何在c#.net中将图像文件(如扫描副本)转换为文本文件[重复]

是否可以在 C++ 中将 bitset<8> 转换为 char?

在 C++ 中将 24 小时时间转换为整数值 [关闭]