file.get()
читает один символ, возвращает его и переходит к следующему символу ввода. Поэтому код:
while (file.get() != ']')
{
temp += file.get();
}
читает первый символ, сравнивает со скобкой, потом приписывает в temp второй символ. Потом читает третий и, возможно, приписывает четвертый и т.д. Два вызова file.get() выполняют два чтения.
Правильно делать так:
while ( (с = file.get()) != ']')
{
temp += с;
}
И похожим образом обрабатывайте '[' перед этим. Читайте в переменную, сравнивайте и не забудьте прочтенный символ засунуть в строку.
Ну, или используйте в условиях
istream::peek.