Невозможно прочитать два разных файла подряд

0

Я пишу программу, которая может принимать 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;
  • 0
    cplusplus.com/reference/cstring/strcmp
  • 0
    operator==() перегрузки std :: string operator==()
Показать ещё 4 комментария
Теги:

1 ответ

1
Лучший ответ

s1.str(str1); не работает так, как вы ожидаете. Вы должны каждый раз создавать новый объект istringstream:

istringstream s1(str);
s1 >> command;
s1 >> filename;

или добавьте clear() после str():

s1.str(str);
s1.clear();
s1 >> command;
s1 >> filename;

Ещё вопросы

Сообщество Overcoder
Наверх
Меню