Назначение переменных после разбора файла с переполнением стека

Я ищу небольшое руководство или помощь с этим конкретным барьером в C ++. Я родом из питона, поэтому некоторые вещи сбивают меня с толку. Я беру текстовый файл в качестве аргумента командной строки и пытаюсь разобрать / присвоить переменные вещам, которые я прочитал в тексте. Я сделал супер простой текстовый файл, и то, что я считаю супер простым cpp файлом. Я написал это, основываясь на некоторых других советах, похожих на вопросы, на которые я ответил, здесь ответил.

В python я мог бы реализовать быструю сортировку регулярных выражений для функции .readlines () и быстро назначать переменные, и я знаю, что в CPP это будет не так просто, поэтому вот что я получил:

#include <fstream>
#include <iostream>

using namespace std;

int main(int argc, char *argv[])
{
if (argv > 1)
{
std::ifstream s(argv[1]);
if (s.is_open())
; // compiler complained unless this was on its own line
{
int i, j, k; // assign ints, no idea why
s >> i >> j >> k; //
std::cout << i << endl;
std::cout << j << endl;
std::cout << k << endl;

// repeat the same with chars, try to assign from file reads?

}
}
}

и мой текстовый файл просто имеет:

5
3
1

Я ожидаю увидеть результаты моей программы
«5 \ n 3 \ n 1»

чего не происходит. То, что я в конечном итоге хочу сделать, это иметь целевую строку, например:
«Грузовик 500» и ищите «Грузовик», но присваивая переменной int truck значение «500»

Извините, если мой вопрос повсюду, но любая помощь или ссылки в правильном направлении также приветствуются. Спасибо!

0

Решение

Во-первых, точка с запятой после if-условие является полным условным блоком if-это заявление (и оно может идти в предыдущей строке, но почти наверняка вы не хотите, чтобы точка с запятой была в первую очередь). Кроме того, вы всегда нужно проверить ваши входные данные после чтение! Поток не знает, что вы собираетесь делать дальше, и не может предсказать, будет ли он успешным, прежде чем попытаться. То есть ваш код должен выглядеть примерно так:

std::ifstream in(argv[1]);
if (!in) {
std::cout << "ERROR: failed to open '" << argv[1] << "' for reading\n";
}
else {
int i, j, k;
if (std::cin >> i >> j >> k) {
std::cout << "read i=" << i << " j=" << j << " k=" << k << '\n';
}
else {
std::cout << "ERROR: there was a format error\n";
}
}

Тем не менее, основываясь на вашем коде, вы должны увидеть ожидаемый результат, предполагая, что вам действительно удалось правильно открыть файл. Я предполагаю, что код выше укажет, что происходит не так.

3

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

Других решений пока нет …