Разбираю файл в массив с помощью freopen, но не понимаю как вернуть стандартный поток ввода обратно, может кто с таким сталкивался. Приложение консольное.
bool LoadData(const string &fn)
{
bool stat(0);
if ( freopen(fn.c_str(), "r", stdin) )
{
stat = 1;
...
}
fclose (stdin);
return stat;
}
int main()
{
...
LoadData(fn);
...
cin >> s; // это не работает
...
system ("pause"); // это тоже не работает т.к. завязано на stdin
return 0;
}
Вообщем решение для windows: freopen("CON", "r", stdin);
удалять вопрос не буду, может кому пригодится.
Ответ
Давайте-ка я вынесу из комментариев.
Вам нужно поменять функцию LoadData так, чтобы она читала не из stdin, а из данного файла.
bool LoadData(const string &fn, Dup &tmp)
{
tmp = {0,0,0,0,"",fn};
bool stat(0);
// if ( freopen(fn.c_str(), "r", stdin) )
FILE* f = fopen(fn.c_str(), "r");
if (f)
{
плюс поменяйте везде getchar() на getc(f), плюс в конце fclose(stdin) на fclose(f)
Ещё по коду: вы совершенно зря объявили
char t = getchar();
Дело в том, что getchar (а также getc) возвращают для конца файла значение EOF, которое не равно ни одному из значений, помещающихся в char. В текущей версии кода, если вдруг значение (char)EOF встретится в файле, работа функции прекратится. Используйте int
Комментариев нет:
Отправить комментарий