Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Saratnik
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 23
1

Передача переменной из функции в функцию

17.05.2015, 15:43. Просмотров 335. Ответов 4
Метки нет (Все метки)

C++ (Qt)
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
#include <iostream>
#include <fstream> // работа с файлами
#include <iomanip> // манипуляторы ввода/вывода
#include <string>
using namespace std;
 
 typedef struct lib {
      string       memberName[64];    //имя участника
      int          teamNum;       //номер команды
      int          earnedPoints;  //количество баллов
            
                    }l_lib;
int menu(l_lib *l, int lines_count);
int save(l_lib *l, int lines_count)
{
    char *fname = (char *)malloc(64); /* имя файла */
    FILE *f;
    printf("Введите имя файла: ");
    scanf("%s", fname);
    f = fopen(fname, "w+"); // в режиме чтения и записи
    /* проверка */
    if (f == NULL)
    {
        fprintf(stderr, "Не могу открыть файл %s\n", fname);
        return 0;
    }
    // запись в файл
    for (int i = 0; i < lines_count; i++)
    {
        fprintf(f, "%s %d %d\n", l[i].memberName, &l[i].teamNum, &l[i].earnedPoints);
    }
    fclose(f);
}
int load (l_lib *l, int lines_count ) {
    
    char *fname = ( char * )malloc (64); /* имя файла */
    FILE *file; 
    printf ("Введите имя файла: ");
    scanf ("%s" , fname);
    file = fopen (fname , "r"); //откроем в режиме чтения
    /* проверка */
    if (file == NULL)
    {
        fprintf (stderr , "Не могу открыть файл %s\n" , fname);
        return 0;
    }
    /* подсчет кол-ва строк */
    while (!feof (file) && !ferror (file))
    if (fgetc (file) == '\n')
        lines_count++;
    lines_count++;
    fseek (file , 0L , SEEK_SET); /* установим указатель в начало файла */
    while (getchar () != '\n') /* очистим буфер */
        continue;
    /* выделим память под массив структур */
    l = ( l_lib * )malloc (lines_count * sizeof(l_lib));
    /* проверка */
    fseek (file , 0L , SEEK_SET); /* установим указатель в начало файла */
    if (l == NULL)
        fprintf (stderr , "Выделить память не удалось!\n");
    /* запись данных в массив структур */
    for (int i = 0; i < lines_count; i++)
        fscanf (file , "%s %d %d" ,  &l[i].memberName, &l[i].teamNum, &l[i].earnedPoints );
    fclose (file); /* закрываем файл */
    menu (l , lines_count);
    
}
void show (l_lib *l, int lines_count)
{
    int configs[6] = { 0, 0 };
    int ch = '#'; /* комментарий в конфиге */
    int i = 0, n = 0;
    char buf[50]; //буфер
    char *str;//считываемая строка
    FILE *file;
    file = fopen("config.txt", "r"); // открываем в режиме чтения
    if (file == NULL) // проверка
    {
        fprintf(stderr, "Не могу открыть файл конфигурации!\n");
        return;
    }
    while (n < 4) // пока не дошли до 5 строки
    {
        str = fgets(buf, sizeof(buf), file); // получаем строку
        //Проверка на конец файла или ошибку чтения
        if (str == NULL)
            break;
        if (strchr(str, ch) == NULL) /* если не комментарий */
        {
            configs[i] = atoi(str);
            i++;
            n++;
        }
        else
        {
            n++;
            continue;
        }
    }
    /* выводим массив структур на экран */
    for (int i = 0; i < lines_count; i++)
 
             cout << l[i].memberName << setw(configs[0]) 
            << " "<< l[i].teamNum << setw(configs[1]) 
            << " "<< l[i].earnedPoints << setw(configs[2])
            <<    endl;
    
}
int menu(l_lib *l, int lines_count) {
    int action; 
    do {
        cout << "Выберите действие:\n"
            << "1. Чтение данных из файла\n"
            << "2. Запись данных в файл\n" 
            << "3. Вывод данных на экран\n" 
            << "4. Сортировка данных\n" 
            << "5. Выход\n";
         printf ("Примечание: команды следует выполнять последовательно одну за другой!\n");
         printf ("Введите номер команды: ");
            cin >> action;
    } while( action > 5 || action < 0 );
    return action;
    
}
 
int main (){
    l_lib *l=0;
    int lines_count=0;
    string fname;
     int action=0;
     setlocale(LC_ALL, "rus");
     
     while(action != 6)
     {
         action = menu(l, lines_count);
        
         if(action==1)
         {
             load(l, lines_count);
         }
         if(action==2)
         {
             save(l, lines_count );
         }
         if(action==3)
         {
            show(l, lines_count);
         }
         if(action==4)
         {
            
         }
         if(action==5)
         {
            
         }
     }
}

Программа, должна считывать из файла текст и сортировать по определенным условиям (Сортировки тут еще нет).... Но загвоздка в том, что после считывания из документа текст, переходим к следующей функции , например к выводу на экран.... То он ничего не выводит.... почему??
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
17.05.2015, 15:43
Ответы с готовыми решениями:

Передача переменной в функцию
Здравствуйте. Подскажите пожалуйста как сделать следующее: есть класс:...

Передача переменной в лямбда-функцию по значению
Ребят! А объясните, что тут происходит, позязя :). function&lt;int()&gt; f()...

Передача значения переменной-члена из класса в функцию
Добрый день, имеется класс: class ZernPole{ ...

Передача переменной из одной функции в другую
Доброго времени суток, мне нужно передать переменные *x и n из функции main в...

Передача типа переменной через аргумент функции
Стоит задача: реализовать свой вариант динамических массивов без использования...

4
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.05.2015, 17:12 2
передавайте lines_count по ссылке
0
Saratnik
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 23
17.05.2015, 18:14  [ТС] 3
retmas, а можно конкретнее????
0
retmas
Жарю без масла
865 / 747 / 225
Регистрация: 13.01.2012
Сообщений: 1,702
17.05.2015, 18:17 4
C++
1
2
3
int load (l_lib* l, int& lines_count )
{
// ...
0
Saratnik
0 / 0 / 0
Регистрация: 20.10.2013
Сообщений: 23
17.05.2015, 18:25  [ТС] 5
retmas, неа(( Не работает((
после считывания, lines_count имеет значение 2, а потом обнуляется
0
17.05.2015, 18:25
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
17.05.2015, 18:25

Передача функции в функцию?
Здравствуйте. Есть функция: void f (char*) В нее мне нужно записать...

Передача функции в функцию?
Есть задача. Вычисление определенного интеграла тремя способами для трех...

Передача массива в функцию и из функции
Здравствуйте, у меня простая задача, я ее решила, но вот с передачей данных от...


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

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

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