система («пауза») не будет работать с freopen - PullRequest
0 голосов
/ 27 октября 2011

См. Ниже в комментарии.

int main(){
    //freopen("input.txt","r",stdin);//if I uncomment this line the console will appear and disappear immediately
    int x;
    cin>>x;
    cout<<x<<endl;
    system("pause");
    return 0;
}

Как заставить это работать?

Ответы [ 3 ]

4 голосов
/ 27 октября 2011

Решение 1: используйте cin.ignore вместо system:

...
cout<<x<<endl;
cin.ignore(1, '\n'); // eats the enter key pressed after the number input
cin.ignore(1, '\n'); // now waits for another enter key
...

Решение 2: если вы используете MS Visual Studio, нажмите Ctrl + F5

Решение 3: снова откройтеcon (будет работать только в Windows, кажется, ваш случай)

...
cout<<x<<endl;
freopen("con","r",stdin);
system("pause");
...

Если вы используете решение 3, не забудьте добавить комментарии о том, что делает код и почему:)

1 голос
/ 27 октября 2011

Используйте std::ifstream вместо перенаправления стандартного ввода:

#include <fstream>
#include <iostream>

int main()
{
    std::ifstream fin("input.txt");
    if (fin)
    {
        fin >> x;
        std::cout  << x << std::endl;
    }
    else
    {
        std::cerr << "Couldn't open input file!" << std::endl;
    }

    std::cin.ignore(1, '\n'); // waits the user to hit the enter key
}

(Заимствовано cin.ignore трюк из ответа Анатолика)

0 голосов
/ 27 октября 2011

Вы используете freopen для изменения стандартного ввода вашей программы. Любая запускаемая вами программа наследует стандартный ввод вашей программы, включая программу pause. Программа pause считывает некоторые данные из input.txt и завершает работу.

...