Я ищу небольшое руководство или помощь с этим конкретным барьером в 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»
Извините, если мой вопрос повсюду, но любая помощь или ссылки в правильном направлении также приветствуются. Спасибо!
Во-первых, точка с запятой после 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";
}
}
Тем не менее, основываясь на вашем коде, вы должны увидеть ожидаемый результат, предполагая, что вам действительно удалось правильно открыть файл. Я предполагаю, что код выше укажет, что происходит не так.
Других решений пока нет …