#include <string>
#include <iostream>
int main() {
std::string str;
char magic[9];
std::cin.read((char *)magic, sizeof(magic));
std::cin.seekg(0, std::ios::beg);
while (std::cin >> str) {
std::cout << str << std::endl;
}
}
мой код содержит реализацию функции seekg(0) для std::cin, он ведет себя не так, как ожидалось, в некоторых файлах при запуске как ./a.out < filename
те файлы, которые ведут себя не так, как ожидалось, имеют свойство, состоящее в том, что они имеют количество символов (включая символы конца строки и другие пробелы) меньше 9 (9 — это количество символов, которое мы читаем из cin перед seekg)
если файл содержит более 9 символов, он ведет себя так, как ожидалось, например:
123456789
выдаст вывод как
123456789
в то время как файл, содержащий менее 9 символов, не будет выводить
Например:
1234
не даст выхода
cin.fail()
. В более общем смысле, успехcin.seek()
не гарантируется, так как не гарантируется поддержка произвольного доступа (что и происходит при поиске). Еслиcin
читает напрямую с клавиатуры (что является типичным значением по умолчанию), поиск завершится ошибкой. Практически это МОЖЕТ работать, еслиcin
перенаправляется в реальный файл. - person Peter   schedule 26.02.2018