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

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

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

Формирование массива структур из строки - C++

12.05.2011, 20:43. Просмотров 412. Ответов 5
Метки нет (Все метки)

люди добрые) посмотрите, пожалуйста, цикл... Он разбирает фай на структуру..
Файл выглядит так
el1;el2;el3
el1;el2;el3
el1;el2;el3
почему-то он не воспринимает проверку на символ переноса строки в основном цикле..
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
do
    {
        for (c=c_buf; buffer[c] != '\r\n'; c++)
        {
            c--;
            if (buffer[c] == ';') k++;
            c++;
            switch (k)
            {
            case 0:
                for (tmp=0; buffer[c] != ';'; tmp++)
                {
                    a[i].F[tmp] = buffer[c];
                    c++;
                }
                a[i].F[tmp++] = '\0';
                break;
            case 1:
                for (tmp=0; buffer[c] != ';'; tmp++)
                {
                    a[i].I[tmp] = buffer[c];
                    c++;
                }
                a[i].I[tmp++] = '\0';
                break;
            case 2:
                for (tmp=0; buffer[c] != '\n'; tmp++)
                {
                    a[i].O[tmp] = buffer[c];
                    c++;
                }
                a[i].O[tmp++] = '\0';
                break;
            }
        }
        c_buf = c;
        k=0;
        i++;
    } while(i!=2);
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.05.2011, 20:43
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Формирование массива структур из строки (C++):

Формирование одномерного массива из сумм элементов каждой строки матрицы, кратных числу k - C++
Все, вроде, правильно, но выводит только первый элемент попавший в if. #include <conio.h> #include <iostream> using...

Формирование, сортировка и обработка динамических структур данных. - C++
Требуется решить задачу формирования, сортировки и обработки динамических структур данных. Требуется создать динамический массив...

Динамические массивы структур;Классы. Класс массивы структур;Классы. Класс динамического массива структур. - C++
Здраствуйте.Помогите с практичкой мое задание 4.3. Строка таблицы данных содержит следующую информацию о владельцах авто: ф.и.о....

Формирование строки - C++
Здравствуйте. Вопросы таковы: 1) Если мне нужно сформировать строку из большого числа переменных разного типа (числа, массивы...

Формирование из элементов массива A нового массива B - C++
Собственно, это и есть весь вопрос. Предположим, задан некий массив A. Все элементы данного массива, удовлетворяющие некоторому свойству,...

Передача массива структур в функцию не указывая размера массива - C++
Я читаю с командной строки файл в котором содержится массив структур. Есть библиотека с функцией в которую я прередаю файл и массив...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.05.2011, 21:42 #2
используй fscanf
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
12.05.2011, 21:43  [ТС] #3
при чем тут это?
panicwassano
591 / 559 / 20
Регистрация: 07.11.2010
Сообщений: 2,004
12.05.2011, 21:55 #4
потому что пишешь велосипед когда можно воспользоваться функцией
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
12.05.2011, 23:05  [ТС] #5
Функция fscanf() работает подобно функции scanf(), но читает информацию не из стандартного потока ввода stdin, а из потока, заданного указателем stream. Подробности рассматриваются в разделе этой главы, посвященном функции scanf.

как это разобьет мне считанный файл на структуру?

Добавлено через 1 час 9 минут
panicwassano, все.. понял.. но увы, я не умею этим пользоваться(

кстати, все таки написал..
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
for (i=0;i<kol;i++) { if (buffer[i] == '\n') kol_strok++; }
    for (i=0;(i<=kol_strok) && (c < kol-1);i++) {
        k = 0;
        for (c=c_buf;buffer[c] != '\n';c++) {
            c--;
            if (buffer[c] == ';') k++;
            c++;
            switch (k) {
                case 0:
                    for (tmp=0; buffer[c] != ';'; tmp++) {
                        a[i].F[tmp] = buffer[c];
                        c++;
                    }
                    a[i].F[tmp++] = '\0';
                    break;
                case 1:
                    for (tmp=0; buffer[c] != ';'; tmp++) {
                        a[i].I[tmp] = buffer[c];
                        c++;
                    }
                    a[i].I[tmp++] = '\0';
                    break;
                case 2:
                    for (tmp=0; buffer[c] != '\n'; tmp++) {
                        a[i].O[tmp] = buffer[c];
                        c++;
                    }
                    a[i].O[tmp++] = '\0';
                    c--;
                    break;
            }
        }
        c_buf=c+1;
    }
так работает)
kRicha
0 / 0 / 0
Регистрация: 27.01.2011
Сообщений: 119
13.05.2011, 23:12  [ТС] #6
снова столкнулся с проблемой =(
Вот у меня структура и как я ее заполняю:
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
    struct user 
    {
        char F[15];
        char I[15];
        char O[15];
    } a[10];
    
    for (i=0;i<kol;i++) { if (buffer[i] == '\n') kol_strok++; }
    for (i=0;(i<=kol_strok) && (c < kol-1);i++) {
        k = 0;
        for (c=c_buf;buffer[c] != '\n';c++) {
            c--;
            if (buffer[c] == ';') k++;
            c++;
            switch (k) {
                case 0:
                    for (tmp=0; buffer[c] != ';'; tmp++) {
                        a[i].F[tmp] = buffer[c];
                        c++;
                    }
                    a[i].F[tmp++] = '\0';
                    break;
                case 1:
                    for (tmp=0; buffer[c] != ';'; tmp++) {
                        a[i].I[tmp] = buffer[c];
                        c++;
                    }
                    a[i].I[tmp++] = '\0';
                    break;
                case 2:
                    for (tmp=0; buffer[c] != '\n'; tmp++) {
                        a[i].O[tmp] = buffer[c];
                        c++;
                    }
                    a[i].O[tmp++] = '\0';
                    c--;
                    break;
            }
        }
        c_buf=c+1;
    }
далее, я хочу добавить еще один элемент к структуре, пытаюсь это сделать так:
C++
1
2
3
printf("Vvedite Familiyu: "); scanf("%s",a[kol_strok].F);
    printf("Vvedite Imya: "); scanf("%12s",a[kol_strok].I);
    printf("Vvedite otchestvo: "); scanf("%12s",a[kol_strok].O);
Но при вводе фамилии, оно почему-то добавляет ее к отчеству последнего элемента, считанного с файла.. Подскажите где я не прав...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.05.2011, 23:12
Привет! Вот еще темы с ответами:

Сортировка массива структур через сортировку массива указателей - C++
Ошибка возникает в функции void sort(student **ppStud, int k, char ch). Кто видит ошибку - помогите, пожалуйста. Код программы: ...

Формирование ключевой строки - C++
Добры день, Форумчане нужна помощь со строками. Допустим есть строка и ключевое слово, нужно получить вот такой результат: ...

формирование строки из заданного числа - C++
Написать программу, которая формируют строку из заданного количества случайных латинских букв (строчных). Например: пользователь вел...

Формирование двумерного массива - C++
массив данных А размерностью M на N задан пользователем с клавиатуры вместе с параметром M и N. Кроме того задан одномерный массив P...


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
13.05.2011, 23:12
Ответ Создать тему
Опции темы

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