Проблема Луа Garrys мод (проверки равными и печать)

У меня нет никаких ошибок. Мой рецепт можете взять фамилию нового оружия, но он не равен hololink_swep. Печать равных не появляется. Пожалуйста, помогите.

Мой код:

hook.Add( "PlayerSwitchWeapon", function( ply, oldWeapon, newWeapon )
    print( "Your new weapon is " .. newWeapon:GetClass() .. "." );
        if ( newWeapon == hololink_swep ) then
            print( "This weapon is speciall" .. newWeapon:GetClass() .. "." );
        end
end );
0
2019-09-18 13:50:46
источник
2 ответа

Я дам вам некоторые подсказки - это, наверное, больше похоже на CodeReview.ЮВ сейчас...

Я бы порекомендовал

  • отделяя значение от печати
  • рассматривая ранги как числа (например, или ), так что вы действительно можете работать с ними, и есть некоторые подтверждения, что вы не читаете не-смысл
  • Использовать идиоматические петли, не только в, например, вы не можете сказать, что вы достигли конца файла, прежде чем пытаться читать

Подправить интерфейс, я предлагаю что-то вроде этого

struct Grade {
    void readInput(std::string fname);

    void print(std::ostream& os = std::cout) const;
  private:
    static constexpr auto max_line_length = std::numeric_limits<ssize_t>::max();
    std::vector<int> grades;
};

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

int main() {
    Grade grading;

    grading.readInput("grades.txt");
    grading.print();
}

Это будет основная программа.

Упрощенной/расширенной версии не может быть:

void Grade::readInput(std::string fname) {
    std::ifstream infile(fname);

    infile.ignore(max_line_length, '\n'); // ignore the first line

    int grade = 0;

    while (infile >> grade) {
        grades.push_back(grade);
        infile.ignore(max_line_length, '\n'); // ignore rest eating newline
    }
}

Обратите внимание, как мы игнорируем линий или их частей которые нас не интересуют. Для дополнительного контроля рекомендуется отключить пробельные вприпрыжку:

 infile >> std::nowskipws;

Функция печати может быть простой:

void Grade::print(std::ostream& os) const {
    os << "Grades:";
    for (int g : grades) {
        os << " " << g;
    }
    os << std::endl;
}

Полный Демо

Жить На Coliru

#include <fstream>
#include <string>
#include <vector>
#include <iostream>

struct Grade {
    void readInput(std::string fname);

    void print(std::ostream& os = std::cout) const;
  private:
    static constexpr auto max_line_length = std::numeric_limits<ssize_t>::max();
    std::vector<int> grades;
};

int main() {
    Grade grading;

    grading.readInput("grades.txt");
    grading.print();
}

void Grade::readInput(std::string fname) {
    std::ifstream infile(fname);

    infile.ignore(max_line_length, '\n'); // ignore the first line

    int grade = 0;

    while (infile >> grade) {
        grades.push_back(grade);
        infile.ignore(max_line_length, '\n'); // ignore rest eating newline
    }
}

void Grade::print(std::ostream& os) const {
    os << "Grades:";
    for (int g : grades) {
        os << " " << g;
    }
    os << std::endl;
}

Печать

Grades: 12 17 1 29

С учетом в:

Ignore the first line
12
17
1
29
+0
2019-09-18 18:57:07

Простая версия:

std::string line1;
std::string line2;
std::string line3;
std::string line4;
std::getline(infile, line1);
std::getline(infile, line2);
std::getline(infile, line3);
std::getline(infile, line4);

С петлей:

static const unsigned int LINES_TO_READ = 3;
std::string line1_ignored;
std::getline(infile, line1_ignored);
for (unsigned int i = 0; (i < LINES_TO_READ); ++i)
{
   std::string text_line;
   if (std::getline(infile, text_line))
   {
      std::cout << text_line << std::endl;
   }
   else
   {
       break;
   }
}

Обе версии прочел первые строки. Игнорировать содержимое в переменную, если вы хотите.

Простой метод считывает каждую строку текста, в отдельных переменных.

Второе чтение строк текста с использованием известного количества петель.

+0
2019-09-18 18:57:07

Посмотрите другие вопросы по меткам