почему плавающий ввод из файла не работает

Следующий код предназначен для получения всех плавающих чисел для вычисления из файла «float.txt». Проблема в том, что плавающие числа содержат ненужную информацию между ними.

пример файла:

23.5 aujsaN8.2<:::32

После получения первой плавающей запятой цикл while никогда не заканчивается, программа больше не получает никакой информации из файла. пожалуйста помоги.

int main()
{
float num;
ifstream input("float.txt");

input >> num;
while (!(input.eof()))
{
input >> num;
}
input.close();

return 0;
}

1

Решение

Вы могли бы сделать что-то вроде этого:

decltype(input)::Traits::int_type c;
while ((c = input.peek()) != decltype(input)::Traits::eof())
{
if (std::isdigit(c))
{
input >> num;
... use num ...
}
else
input.get();
}

Идея здесь заключается в peek для следующего символа, и если это цифра, то мы знаем >> потоковое к double удастся, иначе мы на самом деле get() символ для удаления его из входного потока.

Это становится сложнее, если вам нужно извлечь отрицательные числа (подсказка: один из способов — используйте bool отслеживать, если последнее значение c видел был -то есть if (the_bool) num = -num; Перед использованием num). В то время как код выше обрабатывает, например, X0.23X -> 0,23, вам может понадобиться, а может и не понадобиться X.23X — если так, проверьте . затем посмотрите, является ли следующий символ цифрой … хитрая вещь в том, что поиск цифры означает, что вы уже употребили .так что его там не будет input >> num… ты можешь попробовать input.putback('.') но я не уверен, что это стандартно требуется для работы, когда вы потребляете персонажа, а затем заглядываете — вам придется проверить ….

2

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

Смотри, я не знаю, как оператор ввода >> Num; работает, я никогда не использовал их, вместо этого я сделаю это, чтобы извлечь поплавки из указанного вами файла.

float floats=0;
char string[100], ch;
while (file.get(ch)!=' ')
{
string[i]=ch;
i++;
}
string[i]='\0';
floats=atof(string);

Эта программа просто копирует символы до тех пор, пока не будет найдено » (Пробел), как показано в файле u, затем функция aotf () преобразует строку в число с плавающей запятой.
Это ответ на ваш вопрос ??, если да, то, пожалуйста, проголосуйте +1, и если какой-либо вопрос вы можете мне задать, я обязательно помогу вам …

0

это работает

//  g++ -o parse_float_file  parse_float_file.cpp  -std=c++11

#include <iostream>
#include <fstream>
#include <string>

int main() {

float curr_number;
std::ifstream inFile("float.txt");
std::string line;

while(getline(inFile, line)) {

try {

curr_number = std::stof(line);

std::cout << "-->" << curr_number << "<--"  << std::endl;

} catch (const std::exception &e) {

std::cout << "ERROR - not a float : " << line << std::endl;
}
}

return 0;
}
-1
По вопросам рекламы [email protected]