Я ищу небольшое руководство или помощь с этим конкретным барьером, который у меня есть в C++. Я исхожу из фона python, поэтому некоторые вещи меня смущают. Я беру текстовый файл в качестве аргумента командной строки и пытаюсь разобрать/назначить переменные тем вещам, которые я прочитал в тексте. Я сделал супер простой текстовый файл и то, что я считаю супер простым файлом 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"
который не происходит. В конечном итоге я хочу, чтобы у вас была целевая линия: "Truck 500" и найдите "Truck", но присваивая переменную int truck "500",
Извините, если мой вопрос повсюду, но также приветствуется любая помощь или ссылки в правильном направлении. Благодарю!
Во-первых, точка с запятой после if
-statement является полным условным блоком if
-statement (и он абсолютно может идти по предыдущей строке, но почти наверняка вы не хотите иметь точку с запятой в первую очередь). Кроме того, вам всегда нужно проверять свои данные после прочтения! Поток не знает, что вы собираетесь делать дальше, и не может предсказать, будет ли он успешным, прежде чем пытаться. То есть ваш код должен выглядеть примерно так:
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";
}
}
Тем не менее, на основе вашего кода вы должны увидеть ожидаемый результат, предполагая, что вам действительно удалось правильно открыть файл. Я бы предположил, что приведенный выше код укажет, что происходит не так.