С++ читать char из файла, конвертировать в long long int

Это моя функция на данный момент

long long int File::Getline3(int user1, long long 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();

user3 = (atoi(line3));

return user3;
}

Кажется, возвращает большинство чисел, но не все, и в перемешанном формате.

Не уверен, что моя ошибка заключается в чтении строки (getline), ее преобразовании (atoi) или ее возврате.

(line1, line2 и line3 char объявлены в заголовочном файле)

Строка 3 состоит из 16 цифр.


person user3001499    schedule 19.02.2014    source источник
comment
Чего вы ожидаете и что получаете?   -  person Raydel Miranda    schedule 19.02.2014
comment
ожидание 1234567890123456, получение 2147483647   -  person user3001499    schedule 19.02.2014


Ответы (2)


Думаю для long long int должно быть не atoi, а strtoll:

long long int strtoll(const char *nptr, char **endptr, int base);

предположительно line3 - это строка, вы можете использовать ее как:

char* endptr = NULL;
user3 = strtoll(line3.c_str(), &endptr, 10);

и поскольку вы пометили его как c++, вы также можете использовать: http://www.cplusplus.com/reference/string/stoll/

изменить после вашего комментария: strtoll берет const char* и преобразует его содержимое в long long int. Если endptr не равен NULL, strtoll() сохраняет адрес первого недопустимого символа в *endptr. Вы также можете указать base для номера.

Вы сделали (atoi(line3));, но atoi также ожидает const char*, поэтому я предположил, что line3 должно быть std::string (из-за того, как вы его используете), поэтому я попытался в темноте с c_str() получить фактические данные строки, а не сам объект..

Вместо atoi вы, конечно, можете использовать atoll для длинных длинных вещей :)

person Ferenc Deak    schedule 19.02.2014
comment
круто, сработало на славу. Однако я не люблю просто использовать материал, если я не понимаю, как он работает, если это не слишком сложно, не могли бы вы дать краткое объяснение того, что происходит, или указать мне ресурс, который может понравиться? - person user3001499; 19.02.2014

Прочитайте символ за символом с левого конца строки как и вычислите и добавьте к кумулятивному значению в соответствии со значением места.

person Murali Mahadevan    schedule 03.03.2015