У меня есть следующий цикл for
, выполняемый в моей программе, и я не вижу, как его дизайн коррелирует с результатом, который я получаю.My for loop выполняет больше времени, чем ожидается
cout << no_of_lines << endl;
for (int count = 0; count < no_of_lines + 1; count ++)
{
getline(Device, line, '=');
cout << line << endl;
}
Это выход:
3
DeviceName
GPU
Manufacturer
Intel
GraphicalRam
128MB
И это файл DeviceList
DeviceName=GPU
Manufacturer=Intel
GraphicalRam=128MB
В цикле, no_of_lines
относится к количеству строк в файле, в этом случае 3. Я предоставил этот вывод в качестве проверки, что цикл выполняется только один раз в строке. Может ли кто-нибудь сказать мне, почему этот цикл выполняется больше раз, чем ожидалось? Я предполагаю, что из-за моего включения =
в качестве разделителя и что цикл каким-то образом выполняет дополнительное время до приращения, но тогда почему он останавливается на разделителе на последней строке, требуя, чтобы я добавил 1 в цикл ограничение?
Согласно http: //www.cplusplus.com/reference/iostream/istream/getline/ваш код должен читать `DeviceList.getline (строка, 255, '=');`. Я что-то упускаю? – Mikhail 2010-11-24 03:19:40
Этот вывод не соответствует коду и входу. Есть что-то еще, что вы не показываете нам. Нам нужен компилируемый пример, который при запуске показывает проблему. Готов поспорить, что когда вы сделаете этот пример, вы исправите свою собственную проблему. – 2010-11-24 03:20:09
@Mikhail: Нет. Существует std :: getline(), который принимает поток, строку и разделитель, и это то, что вы должны (обычно) использовать (ваша версия требует, чтобы строки были меньше размера буфера и были больны если это не так) см. http://www.cplusplus.com/reference/string/getline/ – 2010-11-24 03:22:21