【问题标题】:difficulty with for loops, reading from and writing to filesfor 循环,读取和写入文件的困难
【发布时间】:2013-04-03 15:54:57
【问题描述】:

我目前正在为我的 210 班级开展一个项目,该项目涉及一个文件,我需要从中提取全名、航班类型、乘客类型、会员级别、行李数量以及这些行李的尺寸/重量。 军事奖励和里程俱乐部、免费行李和超大行李、乘客类型等变得非常复杂......等等......

文件看起来完全像这样:

Mark Spitz E RP NO 2 21.5 24.2 18 6 30 26 20.5 7.5 
Michael Jordan B RP M4 3 53.7 14.1 9.2 15.0 24.2 5.2 9.3 16.2 109.2 12.1 9.6 23.0
Dorothy Hamill E RP NO 2 55.8 27.1 17.2 18.6 15.0 35.2 21.3 9.2

这表明 Mark Spitz 是普通乘客旅行经济舱,不是里程俱乐部的成员。他正在检查两个包:第一个重 21.5 磅,长 24.2 英寸,宽 18 英寸,高 6 英寸;第二个重 30 磅,长 26 英寸,宽 20.5 英寸,高 7.5 英寸。

我以前使用 for 循环从 infiles 中读取,但从来没有这样。 我已经完全停下来,需要一些认真的帮助来解决这个问题,因为我似乎找不到太多关于它的信息。 非常感谢任何和所有帮助! 这是我的当前代码:

#include <iostream>
#include <string>
#include <fstream>
#include <iomanip>
#include <cmath>

using namespace std;

int main ()
{
int newline, firstname, lastname, flighttype, status, membership, numberofbags=0, regularpass, militarypass, militaryorder, member1, member2, member3, member4, nomember;

ifstream infile;
infile.open("data3.txt");

ofstream outfile;
outfile.open("charges.txt");

        infile >> newline;
        for(int a=0; a<newline; a++)
        {
            infile >> firstname  >> lastname;
            outfile <<  firstname  <<" " << setw(10) << left << lastname;
        }

return 0;
}

【问题讨论】:

  • "reading and writing too and from files"这毫无意义,请修正。
  • @m0skit0:为什么没有意义?代码打开一个文件并从中读取;它打开另一个文件并写入它,不是吗?剩下的只是“使用英语”,这可能不是 OP 的母语。
  • 你已经读过名字了;您需要阅读三个字符字段。然后你需要读取行李数量;对于每个袋子,您需要读取重量、长度、宽度、高度。如果有人没有托运行李会怎样?
  • 一些变量(如名称)可能应该是std::string 而不是int。如果您尝试读取错误类型的变量,则流将进入错误状态并拒绝读取更多内容,直到错误被清除。
  • 另一个问题是,你接下来阅读的内容取决于你之前阅读的内容。因此,当您阅读行李数量时,您必须阅读该数量的行李重量和尺寸。这可能比您以前必须处理的更复杂,但它并不那么复杂。它只是意味着另一个循环。我敢肯定,您已经掌握了执行此操作的所有技能,但您只需要以一种新的方式将它们组合在一起即可。真的,这就是编程的全部意义。

标签: c++ for-loop file-io


【解决方案1】:

如前所述,使用了错误的类型。您正在将字符串读入整数变量,这是行不通的。

for(int a=0; a<newline; a++)

您在文件中循环的方式没有意义。请参阅下面的参考资料。

ifstream reference

另外...在尝试移至下一条记录之前,您并未阅读所有字段。您的数据显示一些记录的字段比其他记录多。这会导致你的技术不起作用。如果练习是读取长度相同的记录,那么这是正确的代码,但如果要读取可变长度的记录,则此代码将不起作用。您将需要使用 getline 来进行可变长度记录。

在看到上面 John 的 评论后,我明白了为什么记录长度是可变的。您需要提供将决定应读取多少字段的逻辑。我想我现在可以在我的 200 级 CS 课程中回忆起这种类型的练习。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-07-03
    • 2016-11-25
    • 1970-01-01
    • 2013-08-28
    • 1970-01-01
    • 2018-01-12
    • 2020-07-27
    相关资源
    最近更新 更多