#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);
Комментариев нет:
Отправить комментарий