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

Считывает ли функция fgets строку посимвольно? - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ графика http://www.cyberforum.ru/cpp-beginners/thread290777.html
подскажите как в builder 6 включить графический режим
C++ Разработать программу-драйвер, которая продемонстрирует работу производного класса Создать объявление классов согласно варианту. Разработать программу-драйвер, которая продемонстрирует работу производного класса. Базовый класс: class Device { public: Device (char * fName); ~ Device (); virtual bool Open () = 0; virtual bool Close () = 0; http://www.cyberforum.ru/cpp-beginners/thread290762.html
Разница элементов массива, расположенных между первым отрицательным и вторым положительным C++
Контейнерный класс описывает и обеспечивает набор действий над данными параметризованных массива, размерность которого определяется во время работы программы. Все вычисления и преобразования должны быть реализованы в виде функций-членов класса. В массиве вычислить: - разница элементов массива, расположенных между первым отрицательным и вторым положительным элементами.
Программа для реализации фильтра скользящего среднего. C++
Программа для реализации фильтра скользящего среднего. // Фильтрация методом скользящего среднего template <typename sig_t, typename res_t> void movingAverage (sig_t *pVector, res_t *pResult, int count, int avgLength) { int i, j; res_t avg; for (i = 0; i < count; i++) {
C++ Аналог getch или русские буквы в getch http://www.cyberforum.ru/cpp-beginners/thread290731.html
Здравствуйте, уважаемые господа. Существуют ли какие-нибудь аналоги getch () и _getch, которые не требуют ввода какого-либо другого символа? Или как можно сделать, чтобы в getch () можно было бы использовать русские буквы? Заранее благодарю за возможные ответы.
C++ Сделать класс двухмерного динамического массива Вот такая задачка: "Написать программу работы с матрицами (матрица представляет собой двумерный массив). Матрица является объектом класса. Память под матрицу должна выделяться динамически (с помощью new). Должны быть определены деструктор и следующие конструкторы: · Конструктор по умолчанию создает матрицу с размером по умолчанию; · Копирующий конструктор. ... подробнее

Показать сообщение отдельно
.Malek.
5 / 5 / 0
Регистрация: 20.03.2011
Сообщений: 180
08.05.2011, 07:38  [ТС]     Считывает ли функция fgets строку посимвольно?
А если дан вот такой листинг. Тут просто идет считывание из файла строк и происходит разбиение строки каждого слова символов для того чтобы занести в поля структуры.
То что хранится в файле вот такой вид имеет:
2
MAZDA,qwer,123,3356,1900,10001,Me
Caen,white,123,456,1998,123,Nikto
В первом while мы считываем строку где содержится цифра до символа \n новой строки. Когда мы сохраняли до этого в файл то каждой строке я добавлял символ /n. Поэтому тут она считает только одну строку и выйдет из цикла. Потому что fgets считывает функция считывает до символа \n или до максимального количества заданного вторым аргументом. Потом мы используем N=atoi(string); для того чтобы СИМВОЛ 2 перевести в цифру и использовать в цикли for что будет означать что надо будет дважды выполнить чтобы сохранить две структуры.
Вопрос в том, что во втором while мы теперь начинаем считывать строку т.е. мы считали строку MAZDA,qwer,123,3356,1900,10001,Me и теперь забиваем ее в структуру потом for снова повторяется для
второй строки Caen,white,123,456,1998,123,Nikto. Получается что fgetc ЗАПОМИНАЕТ что надо начать со
следующей строки а не с одной и той же???

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
void LoadFromFile()
{
        FILE *file = fopen( "autos.txt", "r" );
        if( file != 0 )
        {
                char load_string[2];
                char string[255];
                string[0]='\0';
                while(! feof(file) && strcmp(load_string, "\n")!=0)  // schitivaem kolichestvo mashin v faile
                {
                        fgets( load_string, 2 , file );
                        strcat(string, load_string);
                }
                N=atoi(string);
                delete[] AutosArray;
                AutosArray=new Auto[N];
                for(int i=0; i<N; i++)    // teper' schitivaem mashini
                {
                        string[0]='\0';
                        load_string[0]='\0';
                        while(! feof(file) && strcmp(load_string, "\n")!=0)   // schitivaem stroky
                        {
                                fgets( load_string, 2 , file );
                                strcat(string, load_string);
                        }
                                                          // zanosim stroky v strukturu
                        char* temp=new char[255];
                        temp[0]='\0';
                        int j=0;
                        for(int k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Mark, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Color, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Serial, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].RegNum, temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        AutosArray[i].Year=atoi(temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!=','; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        AutosArray[i].Price=atoi(temp);
                        temp[0]='\0';
                        j++;
                        for(k=0; (char)string[j]!='\n'; k++, j++)
                        {
                                temp[k]=string[j];
                                temp[k+1]='\0';
                        }
                        strcpy(AutosArray[i].Owner, temp);
                }
                cout<<"Autos.txt loaded"<<endl;
        }
        else
        {
                N=0;
                delete[]AutosArray;
                cout << "File not found !!!" << endl;
        }
        fclose(file);
}
Добавлено через 9 минут
Цитата Сообщение от kravam Посмотреть сообщение
функция fgets считывает файл построчно и только потом идёт на проверку условия
Да и я проверил вставил в while строку вывода все таки fgetc читает не всю сразу строку а потом проверка условия. она извлекает один символ а потом идет проверка и так каждый раз.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru