Как я могу сказать программе прекратить использование freopen

Я новичок в C++, и у меня есть вопрос, который выходит за рамки моих возможностей. Я компилирую под GNU GCC. я использую

#include<stdio.h>

также известен как:

#include<cstdio>

В какой-то момент в моей программе я говорю программе использовать файл de_facut.txt как входящий файл:

freopen("de_facut.txt","r",stdin);

Как я могу указать программе использовать консоль для ввода ввода (по умолчанию) вместо файла in? Сначала я хочу прочитать из этого файла, но позже в программе я хочу, чтобы пользователь вводил данные в консоли. Надеюсь, вы поняли мою проблему, я не очень хорошо говорю по-английски.


person the_young_programmer    schedule 31.10.2015    source источник
comment
Почему вы вообще используете freopen? На самом деле, почему вы вообще используете функции C? Это С++! Используйте std::cin для ввода с консоли и std::ifstream для ввода файла. Ничего более сложного, чем это...   -  person Lightness Races in Orbit    schedule 31.10.2015
comment
Я не хочу использовать потоки. Я решил свою проблему, прочитайте мой комментарий для другого парня (если хотите).   -  person the_young_programmer    schedule 01.11.2015
comment
Если вы изучаете C++, вы должны изучать C++. Конечно, решать вам, но если вы хотите развить рыночные навыки, вы можете подумать о том, чтобы послушать экспертов;)   -  person Lightness Races in Orbit    schedule 01.11.2015


Ответы (3)


Тот же вопрос был задан о stdout: Как перенаправить вывод обратно на экран после freopen(out.txt, a, stdout), но ответ одинаков для обоих - есть нет чистого способа сделать это: http://c-faq.com/stdio/undofreopen.html

Поскольку вам нужно читать из консоли позже в программе, я предлагаю вам просто открыть файл как файл. Если причина, по которой вы хотите использовать stdin для чтения из файла, заключается в том, что вам не нужно передавать дескриптор файла таким функциям, как fscanf, вы можете вместо этого использовать средства fstream — код может выглядеть точно так же, как при чтении из консоли:

#include <iostream>
#include <fstream>

using namespace std;
int main()
{
    int x;
    cin >> x; // reading from console
    {
        ifstream cin("input.txt");
        cin >> x; // reading from file
    }
    cin >> x; // again from console

    return 0;
}
person AlphaStream    schedule 31.10.2015
comment
Боюсь, вы совсем не поняли мой вопрос... В любом случае спасибо за помощь, проблему решил сам... Использую теперь глобальный ФАЙЛ *fin; и ФАЙЛ * fout; и закройте файлы, которые мне нужно прочитать с консоли. - person the_young_programmer; 31.10.2015
comment
@the_young_programmer: Альфа прекрасно понял вопрос. То, что вам не нравится ответ, не делает его менее точным. Кроме того, если вы нашли решение, вы должны опубликовать его как ответ, чтобы он мог помочь будущим читателям. Когда вы размещаете вопрос здесь, это не только для вас! - person Lightness Races in Orbit; 01.11.2015

Используйте 1_:

FILE *fp=freopen("data.txt","r",stdin);
/*your code here*/
fclose(fp);

ref: функция библиотеки C - freopen()

person Catoverflow    schedule 08.05.2021

В окнах

freopen("CON","r",stdin);

этот код работал для меня. Он переключает стандартный ввод на консоль.
P.S. Текстовый файл, используемый для ввода до этого, должен заканчиваться новой строкой.

person Risal Shahriar Shefin    schedule 24.11.2020