Форум программистов, компьютерный форум CyberForum.ru

Построчное считывание из файла - C++

Восстановить пароль Регистрация
 
LEBRON32RUS
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 90
28.02.2013, 22:34     Построчное считывание из файла #1
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
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
typedef struct
{
    double x1;
    double y1;
    double x2;
    double y2;
 
}COORD;
 
double cX, cY;
 
int CalcCross(COORD *sect1, COORD *sect2)
{
    double a[2], b[2], c[2];
    
    
        a[0] = sect1->y1 - sect2->y2;
        b[0] = sect1->x2 - sect2->x1;
        c[0] = sect1->x1 * sect2->y2 - sect1->y1 * sect1->x2;
        
        a[1] = sect2->y1 - sect2->y2;
        b[1] = sect2->x2 - sect2->x1;
        c[1] = sect2->x1 * sect2->y2 - sect1->y1 * sect1->x2;
            
        cX = -(c[0]*b[1] - b[0]*c[1])/(a[0]*b[1] - b[0]*a[1]);
        cY = -(a[0]*c[1] - c[0]*a[1])/(a[0]*b[1] - b[0]*a[1]);
        
        return (((sect1->x1 <= cX && sect1->x2 >= cX) || (sect1->x2 <= cX && sect1->x1 >= cX)) &&
                ((sect2->x1 <= cX && sect2->x2 >= cX) || (sect2->x2 <= cX && sect2->x1 >= cX)) &&
                ((sect1->y1 <= cY && sect1->y2 >= cY) || (sect1->y2 <= cY && sect1->y1 >= cY)) &&
                ((sect2->y1 <= cY && sect2->y2 >= cY) || (sect2->y2 <= cY && sect2->y1 >= cY)));
}
 
int main(void)
{
    COORD *sect;
    int N;
    FILE *fin, *fout, *finb;
    
    system ("cls");
    
    fin = fopen("Data.txt","r");
    fscanf(fin, "%d", &N);
    
    sect = (COORD*)malloc(sizeof(COORD)*N);
    if (!sect)
    {
        printf("Not memory");
        return -1;
    }
    
    for (int i=0;i<N;i++)
    {
        (fscanf(fin, "%lf %lf %lf %lf", &sect[i].x1, &sect[i].y1, &sect[i].x2, &sect[i].y2));
    }
    
    fclose(fin);
    
    fout = fopen("Data.bin","wb");
    fwrite (&N, sizeof(int), 1, fout);
    fwrite (&sect,sizeof(COORD),N,fout);  
    fclose(fout);
    
    finb = fopen("Data.bin","rb");
    fread (&N,sizeof(int),1,finb);
    
    for (int i=0;i<N;i++)
    {
        fscanf(finb, "%lf %lf %lf %lf", &sect[i].x1, &sect[i].y1, &sect[i].x2, &sect[i].y2);
    }
    
    fclose(finb);
    
    for (int i=0;i<N-1;i++)
    {
        for (int j=1+i;j<N;j++)
        {
            if (CalcCross(&sect[i], &sect[j])) 
            {
                printf ("Point of intersection %d and %d straight is: X = %lf , Y = %lf\n", i, j, cX, cY);
            }    
        }
    }
    
    free(sect);
    
    return 0; 
}
Программа успешно считывает только первую строку тоесть количество значений а заполнить структуры из файла не может.помогите найти ошибку или переделать.Data.txt
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:34     Построчное считывание из файла
Посмотрите здесь:

Построчное чтение из файла C++
Построчное считывание файла C++
Построчное считывание текста C++
C++ Построчное считывание из файла
C++ Построчное считывание файла txt в массив
C++ Построчное считывание файла
Построчное считывание матрицы из файла C++
C++ Построчное считывание в файл

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

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
alsav22
5282 / 4801 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
01.03.2013, 02:35     Построчное считывание из файла #2
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Вот так всё читает:
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
97
98
#include <stdio.h>
#include <stdlib.h>
#include <malloc.h>
 
typedef struct
{
    double x1;
    double y1;
    double x2;
    double y2;
 
} COORD;
 
double cX, cY;
 
int CalcCross(COORD *sect1, COORD *sect2)
{
    double a[2], b[2], c[2];
    
    
        a[0] = sect1->y1 - sect2->y2;
        b[0] = sect1->x2 - sect2->x1;
        c[0] = sect1->x1 * sect2->y2 - sect1->y1 * sect1->x2;
        
        a[1] = sect2->y1 - sect2->y2;
        b[1] = sect2->x2 - sect2->x1;
        c[1] = sect2->x1 * sect2->y2 - sect1->y1 * sect1->x2;
            
        cX = -(c[0]*b[1] - b[0]*c[1])/(a[0]*b[1] - b[0]*a[1]);
        cY = -(a[0]*c[1] - c[0]*a[1])/(a[0]*b[1] - b[0]*a[1]);
        
        return (((sect1->x1 <= cX && sect1->x2 >= cX) || (sect1->x2 <= cX && sect1->x1 >= cX)) &&
                ((sect2->x1 <= cX && sect2->x2 >= cX) || (sect2->x2 <= cX && sect2->x1 >= cX)) &&
                ((sect1->y1 <= cY && sect1->y2 >= cY) || (sect1->y2 <= cY && sect1->y1 >= cY)) &&
                ((sect2->y1 <= cY && sect2->y2 >= cY) || (sect2->y2 <= cY && sect2->y1 >= cY)));
}
 
int main()
{
    COORD *sect;
    int N;
    FILE *fin, *fout, *finb;
    
    system ("cls");
    
    fin = fopen("Data.txt","r");
    fscanf(fin, "%d", &N);
    
    sect = (COORD*)malloc(sizeof(COORD)*N);
    if (!sect)
    {
        printf("Not memory");
        return -1;
    }
    
    for (int i = 0; i < N; i++)
        fscanf(fin, "%lf %lf %lf %lf", &sect[i].x1, &sect[i].y1, &sect[i].x2, &sect[i].y2);
        
    fclose(fin);
    
    fout = fopen("Data.bin","wb");
    fwrite(&N, sizeof(int), 1, fout);
    for (int i = 0; i < N; i++)
    {
        fwrite(&sect[i].x1, sizeof(double), 1, fout);
        fwrite(&sect[i].y1, sizeof(double), 1, fout);
        fwrite(&sect[i].x2, sizeof(double), 1, fout);
        fwrite(&sect[i].y2, sizeof(double), 1, fout);
    }
    fclose(fout);
    
    finb = fopen("Data.bin","rb");
    fread (&N, sizeof(int), 1, finb);
    
    for (int i = 0; i < N; i++)
    {
        fread(&sect[i].x1, sizeof(double), 1, fout);
        fread(&sect[i].y1, sizeof(double), 1, fout);
        fread(&sect[i].x2, sizeof(double), 1, fout);
        fread(&sect[i].y2, sizeof(double), 1, fout);
    }
    fclose(finb);
    
    for (int i = 0; i < N - 1; i++)
    {
        for (int j = 1 + i; j < N; j++)
        {
            if (CalcCross(&sect[i], &sect[j])) 
            {
                printf ("Point of intersection %d and %d straight is: X = %lf , Y = %lf\n", i, j, cX, cY);
            }    
        }
    }
    
    free(sect);
    
    return 0; 
}
С CalcCross() не разбирался.
Yandex
Объявления
01.03.2013, 02:35     Построчное считывание из файла
Ответ Создать тему
Опции темы

Текущее время: 06:25. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru