c ++ читает 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, объявленный в заголовочном файле)

Строка 3 длиной 16 цифр.

2

Решение

Я думаю для 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 долго долго 🙂

5

Другие решения

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

0

По вопросам рекламы [email protected]