Это моя функция на данный момент
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, объявленный в заголовочном файле)
Строка 3 длиной 16 цифр.
Я думаю для long long int
так не должно быть atoi
, но strtoll
:
long long int strtoll(const char *nptr, char **endptr, int base);
supposingly 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
долго долго 🙂
Читайте char за char из левого конца строки как и вычисляйте и добавляйте к кумулятивному значению по месту.