Я хочу выбрать числа с плавающей запятой из файла. То, что я думал, как решение было это:Выберите числа с плавающей запятой из файла
while ((ch= getc(fp)) != EOF)
{
if(isdigit(ch))
//do some stuff
}
Однако потом я увидел, что при таком подходе я получаю только целые числа (но я хочу, поплавок). Так что я посмотрел, и я нашел это:
while((fscanf(fp, "%lf", &n) == 1)
//do some stuff
Я также посмотрел определение fscanf()
и среди прочего он говорит ..
Возвращаемое значение
В случае успеха, функция возвращает количество элементов аргумента список успешно заполнен. Этот счетчик может соответствовать ожидаемому числу элементов или быть меньше (даже нулевым) из-за соответствующего сбоя, ошибки чтения или досягаемости конца файла.
Если при чтении произошла ошибка чтения или достигнут конец файла, будет установлен правильный индикатор (feof или ferror). И если либо происходит до того, как любые данные могут быть успешно прочитаны, возвращается EOF.
Если ошибка кодирования происходит при интерпретации широких символов, функция устанавливает errno в EILSEQ.
Однако, я не понимаю while((fscanf(fp, "%lf", &n) == 1)
. Если fscanf()
читает, что число с плавающей точкой вернется 1, в противном случае вернется что-то еще?
Когда вы говорите «выберите», означает ли это, что есть больше неплавающей точки, данные в файле, который вы хотите пропустить? – unwind
хорошо, когда я написал вопрос, который я так и думал, но я более внимательно прочитал упражнение, которое у меня есть, а затем решение, и, как кажется, программа просто выбирает числа, а затем результат печатается в тип float. Однако я оставил вопрос таким, какой он есть, потому что мне любопытно, как я могу это сделать (выберите только плавающие числа). – yaylitzis