Я пишу программу, которая может принимать 3 команды, command1, command2 и до свидания. Первые две команды должны читать файл и делать что-то с данными в этих файлах.
Проблема прямо сейчас в том, что.. он не будет работать над двумя разными файлами подряд. Например..
command1 testing.txt
... THIS WORKS ...
command1 testingagain.txt
wrong command! try again!
Я хочу, чтобы команды работали каждый раз, когда я вводил их с любым именем файла. Я не уверен, как я могу изменить структуру моего кода, чтобы это произошло.
while (getline(cin, str1)){
if (str1 == "bye")
{
return 0;
} else {
s1.str (str1);
s1 >> command;
s1 >> filename;
ifs.open(filename.c_str());
if (ifs.fail()) {
cerr << "ERROR: Failed to open file " << filename << endl;
ifs.clear();
} else {
if (str1 == "command1 " + filename) {
command1(filename);
} else if (str1 == "command2 " + filename) {
command2(filename);
} else {
cout << "Wrong command! try again!" << endl;
}
}
ifs.close();
}
}
return 0;
s1.str(str1);
не работает так, как вы ожидаете. Вы должны каждый раз создавать новый объект istringstream
:
istringstream s1(str);
s1 >> command;
s1 >> filename;
или добавьте clear()
после str()
:
s1.str(str);
s1.clear();
s1 >> command;
s1 >> filename;
operator==()
перегрузки std :: stringoperator==()