seekg — чтение с ++ с начала файла до указанного байта

Попытка записать файл, который читает первый байт в файле, в байт, указанный пользователем. Мне нужна помощь по логике. Если в файле есть буквы от a до z, и я просто хочу прочитать и отобразить первые 10, например. вот часть того, что я написал:

  char byte;
inFile.seekg(0L,ios::beg);
inFile.get(byte);
cout << byte;

for(int i = 0; i < num; i++);  //num is an int specified by the user.
{
inFile.seekg(1, ios::cur);
inFile.get(byte);
cout << byte;
}

2

Решение

Первая проблема — точка с запятой на конце for() линия:

    for(int i = 0; i < num; i++);
{
...
}

На самом деле компилятор видит следующее:

    for(int i = 0; i < num; i++) { /* do nothing num times */ }

{
// code that will only run once
}

Итак, удалите точку с запятой.

Далее, если вы просто читаете байты подряд, нет необходимости искать между ними. Просто звоню get() получит следующий байт в последовательности. Так что удалите seekg() звонки.

Последняя проблема — эта функция на самом деле вызывает inFile.get() Всего num + 1 раз. Первый звонок перед for петля. Тогда в for петли, get() называется num раз (т.е. я = 0, 1, 2, 3 … число-1). Вы можете исправить это, изменив for счетчик цикла (i = 1; i < num; i++) или просто удалив get() позвонить до for петля. В приведенном ниже коде я выбрал второй путь:

void run(int num, istream &inFile)
{
char byte;

for(int i = 0; i < num; i++)
{
inFile.get(byte);
cout << byte;
}
}
1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]