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对于帮助,我正在尝试新的建议方法