Cout показывает другое поведение - PullRequest
0 голосов
/ 08 января 2019

Я реализую основы блокчейна. Но столкнулся со странной проблемой. когда я запускаю свой код после комментирования операторов std :: cout в функции main (), он работает нормально. Но с этими заявлениями cout это дает неправильный вывод, и я действительно запутался, почему это происходит. взгляните на весь файл. https://github.com/mrcreamio/ourcoin

#include <iostream>
#include <string>
#include <time.h>
#include <fstream>
#include "sha256.h"
using namespace std;
string timestamp();

struct Block{
    string data;
    string prev_hashKey;
    string hashKey;
    int BlockNum;
    Block* next;
    Block* prev;
    long long nonce;

};

class chain{
public:
    Block* GenesisBlock = NULL;

    void insert(string data)
    {
        data += timestamp();
        //data+= " ";
        int length = data.length();
        Block* NewBlock = new Block;
        Block* pntr = GenesisBlock;
        Block* previous_ptr = GenesisBlock;

        if (GenesisBlock == NULL) {
            NewBlock->hashKey = sha256(data);
            string temp;
            while (!(NewBlock->hashKey[0] == '0' && NewBlock->hashKey[1] == '0' && NewBlock->hashKey[2] == '0' && NewBlock->hashKey[3] == '0'  && NewBlock->hashKey[4] == '0'))
            {
                temp = data;
                NewBlock->nonce += 1;
                std::string s = std::to_string(NewBlock->nonce);
                temp += s;
                std::cout << "data = "<<temp << '\n';
                std::cout << "nonce = "<< NewBlock->nonce << '\n';
                NewBlock->hashKey = sha256(temp);
            }
            std::cout << "nonce = "<< NewBlock->nonce << '\n';
            NewBlock->prev_hashKey="000000000000000000";
            NewBlock->data = data;
            NewBlock->BlockNum = 0;
            NewBlock->next = NULL;
            GenesisBlock = NewBlock;
        }
        else {
            int counter = 0;
            while(pntr != NULL) {
                previous_ptr = pntr;
                pntr = pntr->next;
                counter++;
            }
            previous_ptr->next = NewBlock;
            NewBlock->hashKey = sha256(data);
            string temp;
            while (!(NewBlock->hashKey[0] == '0' && NewBlock->hashKey[1] == '0' && NewBlock->hashKey[2] == '0' && NewBlock->hashKey[3] == '0'&& NewBlock->hashKey[4] == '0'))
            {
                temp = data;
                NewBlock->nonce += 1;
                std::cout << "nonce = "<< NewBlock->nonce << '\n';
                std::string s = std::to_string(NewBlock->nonce);
                temp += s;
                std::cout << "data = "<<temp << '\n';
                NewBlock->hashKey = sha256(temp);
            }
            std::cout << "nonce = "<< NewBlock->nonce << '\n';
            NewBlock->prev_hashKey = previous_ptr->hashKey;

            NewBlock->prev = previous_ptr;
            NewBlock->data = data;
            NewBlock->BlockNum = counter;
            NewBlock->next = NULL;
        }
    }
void print(){
    Block* curr = GenesisBlock;
    if (curr == NULL)
    {
        cout<<"-------------------------------------"<<endl;
            std::cout << "Nothing to print" << '\n';
        cout<<"-------------------------------------"<<endl;
    }
    else
    {

        cout<<"BlockNum:  "<<curr->BlockNum<<endl;
        cout<<"Data:  "<<curr->data<<endl;
        cout<<"Hash Key:  "<<curr->hashKey<<endl;
        cout<<"Previous Hash Key:  "<<curr->prev_hashKey<<endl;
        cout<<"Nonce :"<<curr->nonce<<endl;
        if (curr->next != NULL) {

        do{
            curr = curr->next;
            cout<<"-------------------------------------"<<endl;
            cout<<"BlockNum:  "<<curr->BlockNum<<endl<<endl;
            cout<<"Data:  "<<curr->data<<endl;
            cout<<"Hash Key:  "<<curr->hashKey<<endl;
            cout<<"Previous Hash Key:  "<<curr->prev_hashKey<<endl;
            cout<<"Nonce :"<<curr->nonce<<endl;
            cout<<"-------------------------------------"<<endl;
        }while(curr->next != NULL);
    }
    }
}

};

string timestamp()
{
time_t now = time(0);
char* dt = ctime(&now);
return dt;
}

int main(){
    chain ch;
    int var,x;
    string data;
    //**** these lines are creating problem****;
    // cout<<"-------------------------------------"<<endl;
    // cout<<"---------WELCOME TO OURCOIN----------" <<endl;
    // cout<<"-------------------------------------"<<endl;

    ch.insert("give me 50 ourcoins ");
    ch.insert("give ahmed 50 ourcoins ");
    ch.print();
}

1 Ответ

0 голосов
/ 08 января 2019

Я полагаю, что проблема может заключаться в том, что последняя строка вашего набора закомментированных строк не имеет точки с запятой в конце!

Также отметим, что вы используете пространство имен std "using namespace std" вверху вашего файла, чего в практике программирования следует избегать, поскольку это может привести к конфликту при использовании другого пространства имен (два пространства имен могут в конечном итоге иметь конфликтующие функции )

Вместо этого просто используйте оператор области видимости, чтобы сохранить свой код конкретным, как вы делаете это в своих классах: (то есть std :: cout << "....";) </p>

Кроме того, ваш код выглядит хорошо и должен работать!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...