преобразовать строку в long long int

0

Я хочу прочитать 3-ю строку из текстового файла в виде string, преобразовать ее в long long int и вернуть это значение.

Данные на третьей строке текстового файла: 1234567890123456

long long int File::Getline3(int user1, int user3)
{
    std::string filename = std::to_string(user1);

    std::ifstream fin(filename + ".txt");
    fin.getline (line1, 5);
    fin.getline (line2, 5);
    fin.getline (line3, 20);
    fin.close();

    // convert line 3 to a string called str
    const char *line3;
    std::string str(line3);

    // convert str to long long int called user3
    long long int strtoll(const char *nptr, char **endptr, int base);
    char* endptr = NULL;
    user3 = strtoll(str.c_str(), &endptr, 10);

    return user3;
}

Комментарии в том, чтобы показать, что я думаю, что я делаю, однако я, вероятно, ошибаюсь (я новичок в указателях).

Когда я пытаюсь создать свою программу, я получаю "нерешенную внешнюю" ошибку.

  • 0
    любые ответы с объяснениями того, что делается, пожалуйста
  • 0
    Код не компилируется
Показать ещё 8 комментариев
Теги:

3 ответа

4
Лучший ответ
long long int strtoll(const char *nptr, char **endptr, int base);

Эта строка объявляет функцию. Это означает, что когда вы вызываете strtoll на несколько строк вниз, вы будете называть эту функцию наиболее очевидным кандидатом. Однако вы никогда не определяли его.

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

Просто удалите излишнюю декларацию:

// convert str to long long int called user3
char* endptr = NULL;
user3 = strtoll(str.c_str(), &endptr, 10);

У вас есть аналогичная проблема с вашим const char* line3, который вы объявляете внутри функции, никогда не присваиваете ничего, а затем создаете строку из. Это не определено; указатель не инициализирован. Предполагая, что у вас есть элемент данных line3 (вместе с вашей line1 и line2), снова вы скрываете его с локальной переменной с тем же именем.

Наконец, передача user3 по значению совершенно бессмысленно, если вы просто пишете и возвращаете его. Удалите этот параметр.

Объединив все это, ваш код должен выглядеть так:

// convert line3 to long long int
char* endptr = NULL;
return strtoll(line3, &endptr, 10);

Короче говоря, будьте меньше декларации-счастливы!

  • 0
    Теперь он компилируется, по крайней мере, однако возвращаемое значение по-прежнему не то, что находится в строке 3 текстового файла, а 10 случайных цифр, какие-либо предложения?
  • 0
    также strtoll не работал, из-за ошибки, сообщающей, что он не определен, поэтому пришлось изменить его на strtol, что может быть, почему он не работает правильно?
Показать ещё 1 комментарий
0
long long int File::Getline3(int user1)
{
    std::string filename = std::to_string(user1);

    std::ifstream fin(filename + ".txt");

    std::string line1, line2; // place to actually store the lines

    getline(fin, line1); // read a line
    getline(fin, line2); // read another line

    long long int number_on_line_3; // somewhere to store the number
    fin >> number_on_line3;         // store the number
    fin.close();

    return number_on_line_3;        // return the number
}
0

https://connect.microsoft.com/VisualStudio/feedback/details/758053/missing-strtold-strtoll-strtoull-functions-from-stdlib-h

Работа для Visual C++, в которой нет этих включений.

  • 1
    В целом, лучше включать сюда контент, а не просто ссылку на него.

Ещё вопросы

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