Не работает reinterpret_cast

Не работает reinterpret_cast. Мне нужно перевести два числа из файла в int, чтобы применить функцию, но последнего не выходит как раз таки. Числа на экран выводятся (в цикле), после с ними ничего не происходит. Как исправить? Срочно необходимо. Заранее спасибо!

#include <fstream>
using namespace std;

class MyList {
public:
    struct Node {   //структура узла
        int value;   //значение в узле
        Node* next;   //указатель на следующий узел
    };
    MyList() {
        start = nullptr;   //изначально список пустой, поэтому начальный и последний узлы заданы пустыми
        last = nullptr;
    }
    void Push(int val) {         //функция, добавляющая элемент в конец списка
        if (start == nullptr) {
            start = new Node{val, nullptr};
            last = start;
        } else {
            last->next = new Node{val, nullptr};
            last = last->next;
        }
    }
    Node* Begin() {   //метод, возвращающий указатель на начало списка, т.к. указатель на начальный узел под модификатором private
        return start;
    }
    void Print() {             //функция печати данных в консоль
        auto start = Begin();
        while (start != nullptr) {
            cout << start->value << " ";
            start = start->next;
        }
        cout << '\n';
    }
    void ListSwap(int a, int b) {    //функция поиска элементов с и замены их значений
        auto it_a = Begin();
        for (int i = 0; i < a; ++i) {
            it_a = it_a->next;
        }
        auto it_b = Begin();
        for (int i = 0; i < b; ++i) {
            it_b = it_b->next;
        }
        int temp = it_a->value;
        it_a->value = it_b->value;
        it_b->value = temp;
    }

private:
    Node* start;   //указатель на начальный узел
    Node* last;   //указатель на последний узел
};

int main() {
    MyList my_list;
    my_list.Push(1);
    my_list.Push(2);
    my_list.Push(3);
    my_list.Push(4);
    my_list.Push(5);

    my_list.Print();

    int a, b;

    ifstream inf("input.txt");    // чтение файла

    if (!inf)
    {
        cerr << "Uh oh, input.txt could not be opened for reading!" << endl;
        cin >> a >> b;
    }

    char buff[8][8];
    while (inf)
    {
        int i=0;
        while( !inf.eof() ) {                     // цикл, который существует пока не закончится файл
            inf.getline(buff[i],sizeof(buff));    // запись в buff строчки i файла
            cout << buff[i];
        }
        i++;
    }
    inf.close();

    while(!(cin>>a) || !(cin>>b))
    {
        cin.clear();
        while(cin.get()!='\n')
            continue;
        cout<<"Input error!";
    }

    int c = reinterpret_cast<int>(buff[0]);
    int d = reinterpret_cast<int>(buff[1]);

    cout<< c << " " << d;

    if(!a || !b) {
        my_list.ListSwap(c, d);
    }
    else {
        my_list.ListSwap(a, b);
    }
    my_list.Print();
}

Ответы (1 шт):

Автор решения: Harry

Вы читаете строку

inf.getline(buff[i],sizeof(buff));

т.е. число в текстовом виде (в виде строки), а после этого преобразуете

int c = reinterpret_cast<int>(buff[0]);

адрес строки в число. Понимаете? Не число в строке, а ее адрес. действуйте ну хотя бы уж так:

int с = atoi(buff[0]);

Поскольку вы спрашиваете только о reinterpret_cast, остальной код не смотрел.

Но еще одно замечание сделаю — вот это

while( !inf.eof() )

неверно.

→ Ссылка