Форум программистов, компьютерный форум, киберфорум
Наши страницы

Увеличение максимального размера массива - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Чтение из файла http://www.cyberforum.ru/cpp-beginners/thread110080.html
Помогите разобраться! Вопрос такой - как читать файл. Я новичок в программировании, прошу сильно не бить. Вот что надумал: #include <fstream> #include <iostream> using namespace std; int...
C++ работа с SNMP Доброго времени суток ув. Коллеги! Требуется разработать программную реализацию протокола SNMP (в частности SNMP агента), основные требования это кроссплатформенность с возможностью запуска данного... http://www.cyberforum.ru/cpp-beginners/thread110077.html
C++ Находим длину самого длинного числа
Ребята, наверное это легко но я чего то не допонимаю:( Написать программу, которая в текстовом файле, состоящем из строк длиной не более 50 символов, находит порядковый номер и длину самого...
C++ Создание мультфильма
вот такая задача: по курсовому проекту с Обектно-ориентовного программирования задали создать мультфильм который длятся около 2-х минут, или игру, который имеет минимум 3-х уровневую иерархию...
C++ Перестановка строк матрицы http://www.cyberforum.ru/cpp-beginners/thread110045.html
Прошу прощения если такая тема есть, поиск не помог мне её найти. Дана матрица MxN: Переставить строки матрицы по возрастанию максимальных элементов строк. То есть: 9 8 7 6 5 4 3 2 1 ...
C++ Как в C ввести скольугодно длинную строку? Читаю K&R, задача 1.16: Доработайте главный модуль программы определения самой длинной строки так, чтоб она выводила правильное значение для какой угодно длины строк входного потока, насколько... подробнее

Показать сообщение отдельно
easybudda
Модератор
Эксперт CЭксперт С++
9913 / 5836 / 975
Регистрация: 25.07.2009
Сообщений: 11,004
31.03.2010, 10:36
PostDoc, Если правильно понял, что нужно прочитать из файла пары значений с плавающей точкой (которых может быть 120000, а может и не быть), я бы лучше так сделал:
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
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
#include <stdio.h>
#include <stdlib.h>
 
typedef struct tagDOUBLES_PAIR {
    double frq;
    double spr;
    struct tagDOUBLES_PAIR* next;
} DOUBLES_PAIR;
 
DOUBLES_PAIR* newDoublesPair(double f, double s, DOUBLES_PAIR* last){
    DOUBLES_PAIR* dp;
    if ( ( dp = (DOUBLES_PAIR*)malloc(sizeof(DOUBLES_PAIR)) ) == NULL )
        return NULL;
    dp->frq = f;
    dp->spr = s;
    dp->next = NULL;
    if ( last )
        last->next = dp;
    return dp;
}
 
void clearAll(DOUBLES_PAIR* dp){
    DOUBLES_PAIR* tmp;
    while ( dp ){
        tmp = dp->next;
        free(dp);
        dp = tmp;
    }
}
 
/* не придумал, что бы ещё сделать, решил распечатать */
void printAll(const DOUBLES_PAIR* dp){
    while ( dp ){
        printf("%.3f\t%.3f\n", dp->frq, dp->spr);
        dp = dp->next;
    }
}
 
/* если очень нужен произвольный доступ. медленно, но работает */
DOUBLES_PAIR* getAt(DOUBLES_PAIR* dp, size_t pos){
    while ( pos-- ){
        if ( !( dp = dp->next ) )
            break;
    }
    return dp;
}
 
#define FILE_NAME "doubles.txt"
 
int main(void){
    DOUBLES_PAIR* first = NULL, * last = NULL;
    size_t cnt = 0;
    FILE* f;
    double frq, spr;
    
    if ( ( f = fopen(FILE_NAME, "r") ) == NULL ){
        fprintf(stderr, "Can't open input file!\n");
        exit(1);
    }
    
    while ( fscanf(f, "%lf %lf", &frq, &spr) == 2 ){
        if ( ( last = newDoublesPair(frq, spr, last) ) == NULL ){
            fprintf(stderr, "Memory error!\n");
            exit(1);
        }
        if ( !first )
            first = last;
        ++cnt;
    }
    
    if ( ferror(f) ){
        fprintf(stderr, "Can't read from input file!\n");
        exit(1);
    }
    
    fclose(f);
    
    if ( !first ){
        fprintf(stderr, "No values!\n");
        exit(1);
    }
    
    printf("\nAll %u pairs:\n", cnt);
    printAll(first);
    printf("\nRandom accessed (3-th) values:\n");
    if ( ( last = getAt(first, 2) ) == NULL ){
        fprintf(stderr, "Wrong index!\n");
        exit(1);
    }
    printf("%.3f\t%.3f\n", last->frq, last->spr);
    
    /* удалить весь список */
    clearAll(first);
    
    exit(0);
}
1
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.