C++ Ifstream和Ofstream问题

C++ Ifstream和Ofstream问题,c++,iostream,C++,Iostream,您好,我在理解Ifstream和Ofstream时有点困难。我正在尝试从名为“thefile.txt”的预制文件导入文本,该文件包含: Google (GOOG) 522.01 2 100 520.66 1.5 80 Apple (AAPL) 389.27 2 150 401.82 1.8 150 Microsoft (MSFT) 25.06 2.5 100 25.07 2 80 下面是代码块: fin.open(inputfile); fin >> stockname1 >

您好,我在理解Ifstream和Ofstream时有点困难。我正在尝试从名为“thefile.txt”的预制文件导入文本,该文件包含:

Google (GOOG)
522.01 2 100
520.66 1.5 80
Apple (AAPL)
389.27 2 150
401.82 1.8 150
Microsoft (MSFT)
25.06 2.5 100
25.07 2 80
下面是代码块:

fin.open(inputfile);
fin >> stockname1 >> buyingcost1 >> commission1 >> shares1 >> sellingcost1 >> sellingcomish1 >> sharessold1
    >> stockname2 >> buyingcost2 >> commission2 >> shares2 >> sellingcost2 >> sellingcomish2 >> sharessold2
    >> stockname3 >> buyingcost3 >> commission3 >> shares3 >> sellingcost3 >> sellingcomish3 >> sharessold3;
fin.close();

所有内容都已正确声明,我已“#”包含了所有需要包含的内容,但当我尝试访问变量时,它们仍然为空。

对于字符串,
操作符>
逐字读取。您必须使用for
stockname

(我假设输入文件已成功打开)

所以你会:

std::getline(fin, stockname1);
fin >> buyingcost1 >> commission1 >> shares1 >> sellingcost1 >> sellingcomish1 >> sharessold1;
// skip until EOL so next getline() reads the right thing
fin.ignore(std::numeric_limits<std::streamsize>::max(), '\n');
std::getline(fin,stockname1);
fin>>购买成本1>>佣金1>>股份1>>出售成本1>>出售佣金1>>股份1;
//跳过直到EOL,以便下一个getline()读取正确的内容
fin.ignore(std::numeric_limits::max(),'\n');

我认为您的程序无法打开该文件。根据您的代码,我猜stockname1是一个字符串。如果成功打开该文件,stockname1中应该有一些内容。要检查问题,第一步是添加If(fin)条件并在分支中输出一些内容以进行调试。安东·萨文提到的错误也存在。

我推测问题可能是“fin.open(inputfile);”
也许“fin.open(inputfile,ios::in);”会起作用吗?
(对于输入,如果您还需要输出,请在下面的链接中使用“ios::in | ios::out”适当的信息)


另一个可能的问题是(例如)“Google(GOOG)”,因为据我所知>>输入以与新行相同的方式解释空格。 正如其他人提到的,“getline.(”读取一整行(尽管据我所知是一个字符串)


我个人在学习基本C++文件处理时发现非常有用。请添加变量声明。此外,您没有检查
fin
是否仍然
good()
(或者是否在
open()
之后)。最可能的情况是,您的工作目录中不存在该文件。好的第一步是验证文件是否已成功打开。在
if(fin)
条件中包装您的输入,在
else
分支中打印一条错误消息。可以将整个程序扔到代码部分吗?当前
stockname1
将在
Google
中读取,而
buyingcost1
将尝试读取
(谷歌)
,因为
>
一次只能读取一个单词。@HalpMehPlz不,在这里抛出整个程序是不合适的。您需要显示一个复制相同行为的。我将如何在列表中使用它?它是std::getline(fin,stockname1);仍然无法打印任何内容,程序将进入if(fin)