Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 循环赢了';不要在文件末尾停止_C++_File_Loops_Io - Fatal编程技术网

C++ 循环赢了';不要在文件末尾停止

C++ 循环赢了';不要在文件末尾停止,c++,file,loops,io,C++,File,Loops,Io,我正在处理文件io,我设法将文件中的数据输入到我制作的向量中,但是当我打印值时,我会在数据的最后一部分之后得到垃圾编号。所以我猜它把不存在的值推到向量中,或者它试图打印向量中不存在的部分。任何帮助都会很好 main.cpp #include <iostream> #include <sstream> #include <fstream> #include <vector> #include <string> #include "stor

我正在处理文件io,我设法将文件中的数据输入到我制作的向量中,但是当我打印值时,我会在数据的最后一部分之后得到垃圾编号。所以我猜它把不存在的值推到向量中,或者它试图打印向量中不存在的部分。任何帮助都会很好

main.cpp

#include <iostream>
#include <sstream>
#include <fstream>
#include <vector>
#include <string>
#include "store.h"

using namespace std;

int main ()
{
    store data;
    ifstream inFile ("C:/Users/Owner/Desktop/Albums.csv");
    string line;
    string item;
    int num;
    int itemnum;
    int linenum = 1;
    ostringstream convert;
    string temp;
    while (!inFile.eof())
    {
        while (getline (inFile, line) )
        {
            istringstream linestream(line);
            itemnum = 0;
            num = 0;
            convert << linenum;
            temp = convert.str();
            data.addtovectv(temp);
            while (getline (linestream, item, ',') )
            {
                if (itemnum == 1 || itemnum == 2 || itemnum == 3 || itemnum == 5)
                {
                    num++;
                    data.addtovectfullline(0, item);
                }
                itemnum++;
            }
            linenum++;
        }
    }
    data.print();
    inFile.close();
    return 0;
}
#包括
#包括
#包括
#包括
#包括
#包括“store.h”
使用名称空间std;
int main()
{
存储数据;
ifstream-infle(“C:/Users/Owner/Desktop/Albums.csv”);
弦线;
字符串项;
int-num;
int itemnum;
int linenum=1;
ostringstream转换;
字符串温度;
而(!infle.eof())
{
while(getline(infle,line))
{
istringstream linestream(线);
itemnum=0;
num=0;
转换成全行;
};
#恩迪夫
store.cpp

#include "store.h"

store::store()
{

}
void store::addtovectv(string a)
{
    v.push_back(a);
    fullline.push_back(v);
}
void store::addtovectfullline(int a, string c)
{
    fullline[a].push_back(c);
}
void store::print()
{
    for(unsigned int i=0; i<fullline.size(); i++)
    {
        for(unsigned int j=0; j<fullline[i].size(); j++)
        {
            cout << fullline[i][j] << endl;
        }
        cout << endl;
    }
}
#包括“store.h”
store::store()
{
}
无效存储::addtovectv(字符串a)
{
v、 推回(a);
全线。向后推(v);
}
void store::addtovectfullline(int a,string c)
{
全行[a]。推回(c);
}
无效存储::打印()
{
for(unsigned int i=0;i
In.good()
不是判断文件是否已完成的适当方法

(来自)

Ios::eof()
检查文件结尾


Ios::Good()
检查打开时是否有错误。当读取过去的
EOF
发生错误时,它可能会退出循环。我尝试将其更改为!infle.EOF(),但sameI认为问题是由第二个getline引起的。可能会有不均匀的行数,因为它不检查EOF,所以会超出范围。好的,我也为该getline添加了EOF检查,但现在它启动并且从不打印任何数据,甚至不会结束程序外部循环检查
infle.good()
是完全冗余的。我怀疑这是问题的一部分。内部循环一直读取到失败。对于getline,这通常意味着文件结束。因此
!infle.eof()
infle.good()
在那里也有同样的用途,而且这个用途与内部循环完全冗余。请提供一个示例输入和预期与实际输出。好的,请这样做,对不起,请更清楚您预期的输出的确切格式。只需逐字粘贴。
while(infle.eof())
-将永远不会输入此循环。您的描述与此代码不匹配。
#include "store.h"

store::store()
{

}
void store::addtovectv(string a)
{
    v.push_back(a);
    fullline.push_back(v);
}
void store::addtovectfullline(int a, string c)
{
    fullline[a].push_back(c);
}
void store::print()
{
    for(unsigned int i=0; i<fullline.size(); i++)
    {
        for(unsigned int j=0; j<fullline[i].size(); j++)
        {
            cout << fullline[i][j] << endl;
        }
        cout << endl;
    }
}