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

Считывание текстового файла - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ 111 http://www.cyberforum.ru/cpp-beginners/thread921035.html
Помогите решить пожалуйста!Надо написать решение на языке С++.Задача на фотографии.Заранее очень Благодарен! Перечитайте правила форума. Название темы должно быть информативным. Задание должно быть перепечатано на форум. Тема должна располагаться в соответствующем разделе.
C++ Получить последовательность ,которая отличается от исходной тем , что все нечетные элементы удвоены Даны натуральное N и последовательность A 1,A 2,…,A N , состоящая из N целых чисел. Получить последовательность ,которая отличается от исходной тем , что все нечетные элементы удвоены. Помогите пожалуйста решить .надо написать на языке С++.Заранее огромное спасибо ! http://www.cyberforum.ru/cpp-beginners/thread921032.html
Найти номера двух точек, расстояние между которыми наибольшее C++
Даны координаты n точек на плоскости: x1, y1,...,xn,yn. Найти номера двух точек, расстояние между которыми наибольшее. Для хранения координат точек создать тип структура. Заполнение массива координат и вычисление расстояния между двумя точками оформить в виде функций.
C++ Вывести в столбец слова из данного файла
Дан текстовый файл, содержащий несколько строк. Вывести в столбик слова из этого файла. Выбор слов из строки оформить в виде функции.
C++ Вычислить периметр многоугольника, целые координаты которого хранятся в массиве структур http://www.cyberforum.ru/cpp-beginners/thread921011.html
Готовлюсь к зачету, помогите решить данную задачу, остальные будут аналогичными, мне бы только понять на примере: Вычислить периметр многоугольника, целые координаты которого хранятся в массиве структур. Вывести на экран координаты каждой вершины и периметр. Вычисление длины отрезка, заполнение динамического массива координат, вывод координат на экран оформить в виде функций.
C++ Вычислить периметр многоугольника,целые координаты которого хранятся в массиве структур Вычислить периметр многоугольника,целые координаты которого хранятся в массиве структур.Вывести на экран координаты каждой вершины и периметр.Вычисление длины отрезка,заполнение динамического массива координат,вывод координат на экран оформить в виде функций.ПОМОГИТЕ ПОЖАЛУЙСТА подробнее

Показать сообщение отдельно
vlad_light
4 / 4 / 0
Регистрация: 24.09.2012
Сообщений: 178

Считывание текстового файла - C++

10.07.2013, 18:18. Просмотров 815. Ответов 11
Метки (Все метки)

Помогите, пожалуйста, разобраться.
При считывании текстового файла, последние несколько символов считываются 2 раза, т.е., если исходный файл был:
"Hi. How are you?", то компилятор считает его примерно так: "Hi. How are you?re you?". Почему так происходит?
В кат скидываю код
Кликните здесь для просмотра всего текста
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
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
#include <cstdio>
 
static const int ARRAY_SIZE_CONST = 100;
 
static const char COMMENT_SYMBOLS[ARRAY_SIZE_CONST] = {'#', '['};
static const int COMMENT_SYMBOLS_LENGTH = 2;
 
struct String
{
    char data[ARRAY_SIZE_CONST];
    int length;
};
 
void parseLine_ (FILE* file, String& string);
void parseBlock_ (FILE* file, const int nStrings, String* string);
void parseSkipString_ (FILE* file);
void parseSkipComment_ (FILE* file, const char* commentSymbols, const int commentSymbolsLength);
 
// mode 0 : reads all strings in parameters[0]
// mode 1 : reads only parameters
// mode 2 : reads at first static parameters, then all other parameters
void parseFile (const char* fileName, const int mode,
                const char* commentSymbols, const int commentSymbolsLength,
                String* staticParameters, const int staticParametersLength, 
                String** parameters, const int parametersLength);
 
int main()
{
    String **str = new String*[32];
        
    for(int i = 0; i < 32; i++)
        str[i] = new String[32];
 
    String strstat[ARRAY_SIZE_CONST];
 
    parseFile ("d:\\test.txt", 1, COMMENT_SYMBOLS, COMMENT_SYMBOLS_LENGTH, strstat, 1, str, 2);
 
    getchar ();
 
    return 0;
}
 
void parseLine_ (FILE* file, String& string)
{
    int i;
 
    i = 0;
 
    while ((string.data[i++] = fgetc (file)) != '\n')
        ;
 
    string.length = i - 1;
 
    return
        ;
}
 
void parseBlock_ (FILE* file, const int nStrings, String* string)
{
    int i;
 
    for (i = 0; i < nStrings; ++i)
    {
        while (fgetc (file) != '=')
            ;
 
        fgetc (file);
 
        parseLine_ (file, string[i]);
    }
 
    return
        ;
}
 
void parseSkipString_ (FILE* file)
{
    while (fgetc (file) != '\n')
        ;
 
    return
        ;
}
 
void parseSkipComment_ (FILE* file, const char* commentSymbols, const int commentSymbolsLength)
{
    int i, flag;
    char temp;
 
    do
    {
        flag = 0;
 
        temp = fgetc (file);
 
        if (temp == '\n')
            flag = 1;
        else
            for (i = 0; i < commentSymbolsLength; ++i)
                if (temp == commentSymbols[i])
                {
                    flag = 1;
                    parseSkipString_ (file);
                    break;      
                }
    }
    while (flag);
}
 
void parseFile (const char* fileName, const int mode, 
                const char* commentSymbols, const int commentSymbolsLength,
                String* staticParameters, const int staticParametersLength, 
                String** parameters, const int parametersLength)
{
    int i;
    FILE* file;
 
    file = fopen (fileName, "rt");
 
    i = 0;
 
    switch (mode)
    {
    case 0 :
        while (!feof (file))
        {
            parseSkipComment_ (file, commentSymbols, commentSymbolsLength);
 
            parseLine_ (file, parameters[0][i++]);
        }
 
        break;
 
    case 1 :
        while (!feof (file))
        {
            parseSkipComment_ (file, commentSymbols, commentSymbolsLength);
 
            parseBlock_ (file, parametersLength, parameters[i++]);
        }
 
        break;
 
    case 2 :
        parseSkipComment_ (file, commentSymbols, commentSymbolsLength);
 
        parseBlock_ (file, staticParametersLength, staticParameters);
 
        while (!feof (file))
        {
            parseSkipComment_ (file, commentSymbols, commentSymbolsLength);
 
            parseBlock_ (file, parametersLength, parameters[i++]);
        }
 
        break;
 
    // case 2, 3, ...
 
    default :
        // statements
        break;
    }
    
    fclose (file);
 
    return
        ;
}
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru