Создание простой программы crackme на C ++, проблемы с переменной и вводом - PullRequest
0 голосов
/ 12 апреля 2020

Итак, я пытаюсь изучить C ++, чтобы я мог научиться некоторому реверс-инжинирингу, поэтому я пытаюсь создать эту простую программу «взломай меня», чтобы создать основу, а не брать на себя чужой проект, когда я выбираю свой собственный путь. Тем не менее, я использую CodeBlocks, так как другие IDE не были совместными, и мне это нравится, и я получил ошибку и две строки. Ниже приведен следующий код. Итак, ошибки следующие:

||=== Build: Debug in SimpleProgram (compiler: GNU GCC Compiler) ===| D:\Programming\C++ Projects\simple programs\SimpleProgram\main.cpp||In member function 'int checker::processing(int)':| D:\Programming\C++ Projects\simple programs\SimpleProgram\main.cpp|15|warning: no return statement in function returning non-void [-Wreturn-type]| D:\Programming\C++ Projects\simple programs\SimpleProgram\main.cpp||In function 'int main()':| D:\Programming\C++ Projects\simple programs\SimpleProgram\main.cpp|22|error: 'x' was not declared in this scope| ||=== Build failed: 1 error(s), 1 warning(s) (0 minute(s), 0 second(s)) ===|

    #include <iostream>

using namespace std;

class checker{
public:
    int number;
    processing(int x){
        x = number;
        if ( number == 10 ){
            cout << "Well done!";
        } else {
            cout << "Keep trying!";
        }
    }
};

int main()
{
    checker cracking;
    cout << "Please enter in the correct number";
    cin >> cracking.processing(x);
    return 0;
}

Изображение проекта и ошибка

Ответы [ 2 ]

0 голосов
/ 12 апреля 2020

Я очистил код и включил комментарии, которые служат примечаниями:

#include <iostream>

using namespace std;

class checker{
public:
    void setnumber(int i){  //it's a good habit to put variables in private and access them with a public function
        this->number = i;
    };
    int processing(int x){  //x is just a placeholder value for whatever you put in here. You can't use it in the rest of the program
        if ( x == 10 ){
            cout << "Well done!" << endl;
            return 1;   //this condition indicates success
        } else {
            cout << "Keep trying!" << endl; //the endline just makes it so you aren't typing on the same line as the message
            return 0;   //this condition indicates success hasn't been reached yet
        }
    }
private:
    int number;
};

int main()
{
    checker cracking;
    cracking.setnumber(10);     //the number is set to 10

    int i, l;   //i is the guess number, l is a condition for the loop
    cout << "Please enter in the correct number" << endl;
    do{     //this loop sets it up so that you can have multiple tries
        cin >> i;
        l = cracking.processing(i);
    }while(l!=1);   //and this condition (the return value of processing(), breaks the loop on success
    return 0;
}

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

Попытка установить от х до number. В функциях параметры являются просто значениями-заполнителями для аргументов, которые будут переданы позже. Затем, когда вы попытались использовать x в качестве входа в программе main(). Вы вызывали эту функцию (использовали ее) и вам нужно было ввести int в качестве ввода.

Не беспокойтесь. Вначале это сбивает с толку всех (, хотя, если быть честным, по мере вашего продвижения вы просто найдете новые вещи, с которыми можно столкнуться. Это никогда не остановится ). Продолжайте в том же духе, и все это будет иметь смысл во времени.

0 голосов
/ 12 апреля 2020

Функция всегда имеет тип возврата, даже если вы ничего не пытаетесь вернуть, она будет иметь подпись void. Если ваше намерение состояло в том, чтобы взять ввод числа, переданного из main, и отобразить его через функцию в вашей программе проверки классов через такой же объект, это будет выглядеть так:

#include <iostream>
using namespace std;

class checker{
public:
    int number;
    void processing(int x)
    {
        if (x==10)
            cout << "Well done!";
        else 
            cout << "Keep trying!";
    }
};
int main()
{
    checker cracking;
    cout << "Please enter in the correct number \n";
    int n;
    cin >> n;
    cracking.processing(n);
    return 0;
}
...