C++ c++;为什么这个循环在将数据读入结构数组时有缺陷?

C++ c++;为什么这个循环在将数据读入结构数组时有缺陷?,c++,arrays,struct,C++,Arrays,Struct,我正在读一首歌的标题、艺术家和歌曲的大小。但它只是在第一组中读取,之后它给了我疯狂错误的值。我的代码非常简单直接,所以我想知道是否有人能告诉我该去哪里 struct Songs { string title; string artist; int men; }; // main stuff Songs song[50]; int size=0; for (int i = 0; i<size;i++) { do { getline(

我正在读一首歌的标题、艺术家和歌曲的大小。但它只是在第一组中读取,之后它给了我疯狂错误的值。我的代码非常简单直接,所以我想知道是否有人能告诉我该去哪里

struct Songs
{
    string title;
    string artist;
    int men;
};
// main stuff

Songs song[50];
int size=0;

for (int i = 0; i<size;i++)
{
    do
    {
        getline(fin, song[size].title);
        getline(fin, song[size].artist);
        fin >> song[size].mem;
        size++;
        i++;
    }
    while (song[size].title.length()>0);
}
struct歌曲
{
字符串标题;
弦乐艺术家;
国际男子;
};
//主要材料
宋(50),;
int size=0;
对于(int i=0;i>song[size].mem;
大小++;
i++;
}
while(歌曲[size].title.length()>0);
}

当(song[size].title.length()>0)
正在查看
song[size]
时,在
size
已经增加之后,至少会出现
。请尝试
song[size-1]

for
循环开始时,
i
size
都为零,因此该代码不应该做任何事情。或者更准确地说,不开始:-)

如果要从输入流读取三元组,直到空白标题或数组已满,可以从以下内容开始:

// Initialise size.

int size = 0;

// Try to get first title.

getline (fin, song[size].title);

// While a title was successfully read.

while (song[size].title.length() > 0) {
    // Get artist and mem (watever that is).

    getline (fin, song[size].artist);
    fin >> song[size].mem;

    Move to next array element, prevent overflow by loop exit.

    if (++size == 50)
        break;

    // Try to get next title.

    getline (fin, song[size].title);
}

// Out here, size is the number of array elements used (0-50).

它可能编译得不完美,我还没有测试过它。它当然不会处理边缘的情况,比如最后的三连体只有一个标题。这只是为了说明算法。

代码中有许多错误

1) 您正在将大小设置为0,然后尝试启动一个由于此原因无法运行的for循环

2) 在for循环中有一个do-while循环,如果我理解正确的话,该循环对于您尝试执行的任务似乎是不必要的

3) 尝试填充结构时,可以使用size变量作为数组索引。通常,在初始化for循环时,您会使用设置的迭代器变量,在本例中是i。您也不应该与i同时增加大小,因为最终可能会出现无止境的循环

4) 您没有缩进代码!这并不完全是一个错误,但它会使调试变得更加困难——这可能是您在第一时间遇到困难的部分原因。(编辑:现在显示已更正。)


一般来说,如果要读取文件,一种方法是在文件开头有一个整数,它指定要创建的对象的数量,使您能够为堆分配适当的内存量,同时还可以设置大小变量。然后,使用此大小变量实现for循环,将数据读入结构。

为什么在for循环中增加i,而每次迭代中i都在增加?您将大小设置为0,然后尝试启动一个for循环,但该循环因此根本不会运行。我发现很难破译这段代码实际上应该做什么——如果我理解正确的话,你是从文件中读取数据来填充一些歌曲结构吗?为什么循环中有一个循环?如果标题的长度大于0,为什么您的do-while循环继续进行?我甚至不知道你想完成什么。您能否添加您试图解决的问题,并向我们提供所有支持代码,而不仅仅是您认为相关的代码。当然,把它删减,这样我们就不会有代码墙,但是什么是
fin
例如?fin是我的输入文件:fin.open(“data.txt”)。。。。>0将跳过可能的空白行:)thnx对于帮助,我正在尝试新的建议方法