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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
LEBRON32RUS
1 / 1 / 0
Регистрация: 06.11.2012
Сообщений: 90
#1

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

28.02.2013, 22:34. Просмотров 629. Ответов 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
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
28.02.2013, 22:34
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Построчное считывание из файла (C++):

Построчное считывание из файла - C++
Всем привет! Функция, которая считывает из файла значения и помещает их в массив. Проблема в том, что даже из файла не читает :-(...

Построчное считывание файла - C++
Всё, я совсем запуталась. Помогите пожалуйста!!! Есть файл, который нужно считать. Но каждая его строка должна быть считана в...

Построчное считывание файла - C++
поделитесь готовой функцией или способом, с помощью которого можно считать с текстового файла ПОСТРОЧНО данные разных типов. например,...

Построчное считывание файла - C++
В файле у меня все строки вида: \x53\x74\x69\x6C\x6C\x2E\x2E\x2E\x00 Код считывающий файл построчно: ifstream i(&quot;first.dlg&quot;); string...

Построчное считывание матрицы из файла - C++
Написал код ifstream fout(&quot;1.txt&quot;); if (fout.is_open()) { int i,j, N=0; fout&gt;&gt;N; //Считываю значение N ...

Построчное считывание файла txt в массив - C++
Добрый день. Пытаюсь вспомнить &quot;как там считывать из файла&quot;, вроде бы делала, но давно это было. Сейчас сижу, кручу-верчу, а понять...

1
alsav22
5426 / 4821 / 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() не разбирался.
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.03.2013, 02:35
Привет! Вот еще темы с ответами:

Построчное считывание в файл - C++
Все записывается в одну строку , как сделать так чтобы записывалось в отдельные строки? void enter_new() { cout &lt;&lt;...

Построчное считывание текста - C++
Мне нужно занести текст из файла в переменную, причем в таком же виде, как в в самом файле. И если потом потребуется вывести эту переменную...

Построчное чтение из файла - C++
Помогите написать программу которая считывает из файла такой структуры; 1 строка 5 7 2 строка ...

Построчное чтение из файла - C++
Помогите пожалуйста, не могу доделать программу, точнее я её сделала но не так как бы мне хотелось. Вот код программы(прога рабочая) ...


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

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

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