Как вы можете запросить ввод данных пользователем, когда также используете текстовый файл в оболочке Unix в C ++?

Я запускаю свой код используя a.out < file.txt и я прочитал весь файл, когда я пытаюсь использовать cin >> variable просить пользователя о вводе ничего не делает.

1

Решение

Когда вы вызываете свою программу с a.out < file.txtпросишь скорлупу file.txt содержание в качестве стандартного ввода для a.out вместо позволить клавиатуре обеспечить стандартный ввод. Если вас это не устраивает, добавьте аргумент командной строки, чтобы указать имя файла, используйте ifstream чтобы открыть его и прочитать вместо cin, использование cin для ввода с клавиатуры.

Например:

int main(int argc, const char* argv[])
{
if (argc != 2)
{
std::cerr << "usage: " << argv[0] << " <filename>\n";
exit(1);
}
const char* filename = argv[1];
if (std::ifstream in(filename))
{
// process the file content, e.g.
std::string line;
while (getline(in, line))
std::cout << "read '" << line << "'\n";
}
else
{
std::cerr << "unable to open \"" << filename << "\"\n";
exit(1);
}
// can still read from std::cin down here...
}
5

Другие решения

Если вам нужен дополнительный пользовательский ввод после вашего стандартного ввода, вы должны открыть свой управляющий терминал, который называется «/ dev / tty». Пример:

#include <iostream>
#include <fstream>

using namespace std;

int main(int argc, char *argv[])
{
ifstream tin("/dev/tty");
ofstream tout("/dev/tty");

tin.tie(&tout);

while (true) {
string input;

tout << "> ";
getline(tin, input);

if (input == "quit")
break;
}

return 0;
}

Чтобы убедиться в том, что выше не будет прочитан перенаправленный файл, выполните простой тест:

$ echo "quit" | ./a.out
>
1

По вопросам рекламы [email protected]