#cpp #c
Разбираю файл в массив с помощью 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);
удалять вопрос не буду, может кому пригодится.
Ответы
Ответ 1
Давайте-ка я вынесу из комментариев. Вам нужно поменять функцию 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.Ответ 2
Вообщем решение для windows: freopen("CON", "r", stdin);
Комментариев нет:
Отправить комментарий