Как получить входные данные из файла, переданного на стандартный ввод - PullRequest
0 голосов
/ 16 октября 2019

Итак, у меня есть программа, которую я запускаю через командную строку на Raspberry Pi на C ++. Я знаю, как уже передать аргументы командной строки, но мне нужно передать его с помощью cin, но я не могу заставить его работать.

Обычно я бы использовал args и использовал форматв командной строке, например ./program filename, но я должен использовать этот формат ./program < filename, чтобы перенаправить имя файла в программу через stdin для этого назначения. Мой инструктор сказал мне использовать cin, но независимо от того, что я делаю, он не откроет файл.

int main(int argc, char *argv[])
{
    cout << "Matching Brackets: NAME" << endl;
    string line;
    string fname;
    cin >> fname;

    ifstream myfile; 
    myfile.open(fname);

    if (myfile.is_open())
    {
        while ( getline (myfile,line) )
        {
            int num = valid(line);
            if(num >= 0)
            cout << valid(line) << " ";
        }
    }

    cout << endl;
    myfile.close();
    return 0;
}

Я пытаюсь заставить cin взять фактическое имя файла текстового файла ииспользуйте это в fstream, чтобы открыть файл и прочитать его для выполнения операций, но я не могу открыть его в этом методе, и я не смог найти ничего о том, как сделать это таким образом.

1 Ответ

1 голос
/ 16 октября 2019

Когда вы используете свою программу как

./program < filename

, вам нужно беспокоиться только о чтении содержимого из stdin/std::cin. main можно упростить до:

int main(int argc, char *argv[])
{
   cout << "Matching Brackets: NAME" << endl;
   string line;

   while ( getline (std::cin, line) )
   {
      int num = valid(line);
      if(num >= 0)
         cout << num << " "; // No need to call valid(line) again;
   }

   cout << endl;
   return 0;
}
...