13 / 13 / 1
Регистрация: 03.08.2010
Сообщений: 61
1

Считывание заранее неизвестного количества вещественных чисел из файла

03.08.2010, 22:18. Показов 6290. Ответов 4
Метки нет (Все метки)

Работаю в среде VisualC++ 6.0. Всё что можно сделать алгоритмом чистого си делаю так. Привычка, может быть немного дурная)
(используются инклуды: stdio.h, stdlib.h)
Вкратце что нужно: имеется текстовый файл с числовыми данными , открываю его функцией fopen(...);
далее нужно считать последовательно записанные через пробелы float-числа в 2 массива (float) my[n][m], и my2[n][m], потом после символа переноса каретки ('\0') всё то же самое, только меняется индекс [n]. Задача непростая, но дело в том, что до переноса на следующую строку может быть переменное количество m пар чисел. то есть программа точно не знает, через какое время будет перенос на следующую строку, а символ переноса идёт после символа пробела, то есть в тот момент, когда в scanf(...) форамте как раз настаёт очередь %f, то есть считывание float-чисел.
Мой вариант решения меня не устраивает, так как при нём приходится несколько раз открывать файл, подскажите, может я просто чего-то не понимаю, полночи сидел, придумывал алгоритм, один сложнее другого, и главное, они все не наглядные и очень сложно в них устранять логические ошибки. Помогите, пожалуйста.

Добавлено через 2 часа 2 минуты
Всё, отбой, нашёл решение.
нашёл функцию fsetpos(...), двигающую курсор чтения в текстовом режиме чтение (fscanf(..)).
Просто тупанул что-то
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.08.2010, 22:18
Ответы с готовыми решениями:

Ввод заранее неизвестного количества чисел массива с клавиатуры
Как написать код, чтобы пользователь вводил числа в массив количество элементов которого не известно

Считывание неизвестного количества чисел
Доброго времени суток, извините что отвлеккаю.Помогите начинающему.Имеется задача...Вводится ряд...

Ввод заранее неизвестного количества строк
Знающие люди помогите! Необходимо ввести с консоли определнное количество строк, заранее не...

Подсчет суммы заранее неизвестного количества ячеек
Здравствуйте. Есть задача такая: Необходимо из листа АСУТПиМ перенести на лист МатерХРиГСМ данные...

4
4857 / 3278 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
04.08.2010, 03:54 2
fgets(), strtok(), atod()

fgets() считывает строку из файла
strtok() отделяет лексему, которую можно сохранить в массив указателей
atod() преобразует строковое представление вещественного числа в double
1
13 / 13 / 1
Регистрация: 03.08.2010
Сообщений: 61
12.08.2010, 00:12  [ТС] 3
strtok() вроде в string.h находятся, а atod() вообще не нашёл, видел есть atof()
0
Модератор
Эксперт PythonЭксперт JavaЭксперт CЭксперт С++
11050 / 6996 / 1657
Регистрация: 25.07.2009
Сообщений: 12,764
12.08.2010, 01:11 4
Лучший ответ Сообщение было отмечено Памирыч как решение

Решение

CyberHunter, не понял, как Вы числа на два вроде бы одинаковых массива делить собираетесь - пример приведите входных данных и того, что должно получиться. А все числа из файла в массив прочитать можно например так:
C
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
#include <stdio.h>
#include <stdlib.h>
 
#define FILE_NAME "mnogo_chisel.txt"
 
int main(void){
    FILE * f;
    double num, * arr;
    size_t i, size;
    
    if ( ( f = fopen(FILE_NAME, "r") ) == NULL ){
        perror("fopen");
        exit(EXIT_FAILURE);
    }
    
    arr = NULL;
    size = 0;
    
    while ( fscanf(f, "%lf", &num) == 1 ){
        if ( ( arr = (double*)realloc(arr, sizeof(double) * (size + 1)) ) == NULL ){
            perror("realloc");
            exit(EXIT_FAILURE);
        }
        arr[size++] = num;
    }
    if ( ferror(f) ){
        fprintf(stderr, "Can't read file %s\n", FILE_NAME);
        exit(EXIT_FAILURE);
    }
    if ( fclose(f) )
        perror("fclose");
    
    if ( ! arr ){
        fprintf(stderr, "Wrong or empty file - %s\n", FILE_NAME);
        exit(EXIT_FAILURE);
    }
    
    printf("%d elements in array:\n", size);
    for ( i = 0; i < size; ++i )
        printf("%f\n", arr[i]);
    
    free(arr);
    exit(EXIT_SUCCESS);
}
1
4857 / 3278 / 467
Регистрация: 10.12.2008
Сообщений: 10,570
12.08.2010, 08:37 5
Цитата Сообщение от CyberHunter
а atod() вообще не нашёл, видел есть atof()
да, там atof(), она сделана на основе strtod(), это я перепутал
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
12.08.2010, 08:37

Программное создание неизвестного заранее количества массивов
Доброго времени суток. Помогите пожалуйста решить задачу. Необходимо программно создавать...

Заполнение заранее неизвестного количества байт (tasm)
Читал на хабре статью Пишем свою ОС. Там был приведен код загрузчика на yasm. И так как код...

Запись с консоли в массив неизвестного заранее количества элементов
Друзья, всем привет! Парюсь над задачкой: Ввести значения с консоли и определить максимальное...

Считывание матрицы вещественных чисел из текстового файла
#include &lt;iostream&gt; #include &lt;fstream&gt; using namespace std; int main () { ifstream...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.