Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
1

Не работают 2 функции в коде

24.12.2013, 22:19. Показов 631. Ответов 15
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Доброе время суток!
У меня такая проблема. Есть програма, и в ней не работают 2 функции. Вывод на екран и поиск (Print и Search). В чем может быть проблема?
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
#include <iostream>
#include <fstream>
#include <cstdlib>
#include <string.h>
#define n 5
struct student  // создаем структуру
{    
    char fam [20];// фамилия
    char name[20];//имя
    char ot[20];// отчество
    char adds[100];//адрес
    int age;//возраст
    int group;//группа
};
 
//добавление записи в файл
void Add(char const* ppath)
{
    std::ofstream ofs(ppath, std::ios::app);//открытие файла на запись, арр - сохраняет содержимое файла, если он существует
    if(ofs.bad() != true)//если файл открыт успешно
    {
        std::cout << "Vvedite chislo zapisey: ";
        int num;//вводим количество записей
        std::cin >> num;
        student tmp;//объявляем имя структуры
        for(int i = 0; i < num; ++i)
        {
            std::cout << "FIO: ";
            std::cin.sync();//очистка буфера потока cin
            std::cin.getline(tmp.name, sizeof(tmp.name));//getline -записывает в перменную n-е кол-во символов, sizeof(tmp.name) - виделяет память под размер (tmp.name)
            std::cin.getline(tmp.fam, sizeof(tmp.fam));
            std::cin.getline(tmp.ot, sizeof(tmp.ot));
            std::cout << "Adres: ";
            std::cin.getline(tmp.adds, sizeof(tmp.adds));
            std::cout << "Vozrast: ";
            std::cin >> tmp.age;
            std::cout << "Gruppa: ";
            std::cin >> tmp.group;
            ofs << tmp.name << '\n' << tmp.adds << '\n' << tmp.age << '\n' << tmp.group << '\n';//запись введённой записи в файл
 
        }
        ofs.close();//закрытие файла
    }
    else
        std::cerr << "Unable to open output file\n";
}
//Вывод файла в консоль
void Print()
{
        std::cout << "\nVse zapisi:\n";
        FILE *in;
        in=fopen ("c:\\Users\Spaser\Documents\Base_o.txt", "r");
   if (in=NULL)
   {
     std::cout<<"Error";
     return;
   }
    
}
//Редактирование или удаление записи. Удаление произойдёт если второй параметр равен true
void Edit(char const* ppath, bool rem = false)
{
    std::ifstream ifs(ppath);//открытие файла на чтение
    if(ifs.bad() != true)
    {
        int const arrsize = 500;
        student arr[arrsize];//массив в который будем читать
        int i;
        for(i = 0; i < arrsize; ++i)//чтение из файла в массив
        {
            ifs.getline(arr[i].name, sizeof(arr[i].name)).getline(arr[i].adds, sizeof(arr[i].adds)) >> arr[i].age >> arr[i].group;
            if(ifs.good() != true)
                break;
            ifs.getline(arr[i+1].name, sizeof(arr[i+1].name));//переход на новую строку файла
        }
        ifs.close();
        std::cout << "Vvedite nomer zapisi: ";
        int num;
        std::cin >> num;
        if(rem != true)//если запись не подлежит удалению то вводим новые данные с клавиатуры
        {
            std::cout << "FIO: ";
            std::cin.sync();
            std::cin.getline(arr[num-1].name, sizeof(arr[num-1].name));
            std::cout << "Adres: ";
            std::cin.getline(arr[num-1].adds, sizeof(arr[num-1].adds));
            std::cout << "Vozrast: ";
            std::cin >> arr[num-1].age;
            std::cout << "Gruppa: ";
            std::cin >> arr[num-1].group;
        }
        std::ofstream ofs(ppath);//открытие файла на запись
        for(int j = 0; j < i; ++j)//проход по массиву arr
        {
            if(!((j == num-1) && rem))//если текущая запись не подлежит удалению
                ofs << arr[j].name << '\n' << arr[j].adds << '\n' << arr[j].age << '\n' << arr[j].group << '\n';//запись в файл
        }
        ofs.close();
    }
    else
        std::cerr << "Unable to open input file\n";
}
//Поиск записи в файле
void Search(char const* ppath)
{
    struct student a[n];
    int j, i;
    char first [20];
    std::ifstream ifs(ppath);
    if(ifs.bad() != true)
    {
        for(i=0;i<n ;i++)
   {
   ifs>>a[i].fam;
   ifs>>a[i].name;
   ifs>>a[i].ot;
   ifs>>a[i].adds;
   ifs>>a[i].age;
   ifs>>a[i].group;
   std::cout<<a[i].fam<<"\t"<<a[i].name<<"\t"<<a[i].ot<<"\t"<<a[i].adds<<"\t"<<a[i].age<<"\t"<<a[i].group<<std::endl;
   }
    std::cout<<"vvedite familiyu dlya poiska\n";
    std::cin>>first;
   j=0;
   for(i=0;i<n;i++)
   if(strcmp (a[i].fam, first)==0)
   {
   std::cout<<"\n FIO:\n "<<a[i].fam<<" "<<a[i].name<<" "<<a[i].ot<<"\n age="<<a[i].age<<"\n adress="<<a[i].adds<<"\n group - "<<a[i].group;
  j=1;
 }
 if(j==0)
    std::cout<<"\n zapisey net";
    }
}
void main()
{   
    char const* ppath = "c:\\Users\Spaser\Documents\Base_o.txt";//файл в котором хранятся записи
    std::cout << "Dobavlenie zapisi\n";
    Add(ppath);
    Print();
    std::cout << "Redactirovenie zapisi\n";
    Edit(ppath);
    Print();
    std::cout << "Udalenie zapisi\n";
    Edit(ppath, true);
    Print();
    Search(ppath);
    system("Pause");
}
Добавлено через 30 минут
есть какие мысли?
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2013, 22:19
Ответы с готовыми решениями:

Не работают функции в приведенном коде
Помогите пожалуйста! Не могу понять. в чем проблема? using System; using...

Найти причины возникновения ошибок в коде и исправить эти ошибки: не работают функции-члены
Ошибка небось наитупейшая.... #include &lt;iostream&gt; using namespace std; class Array {...

Поправки в коде не работают
Если скомпилировать и запустить программу один раз то после внесения изменений в код и они не...

Не работают стили css в js-коде
Здравствуйте! Подскажите пожалуйста, что может быть за проблема, что когда я использую javascript...

15
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 22:25 2
В каком смысле не работают? Не правильно написаны, либо ищет, но находит не то что нужно. Более подробно опишите.
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:32  [ТС] 3
Цитата Сообщение от Bend3r Посмотреть сообщение
В каком смысле не работают? Не правильно написаны, либо ищет, но находит не то что нужно. Более подробно опишите.
просто не работают. Вывод на екран доходит до "std::cout << "\nVse zapisi:\n";" и пропускает остальное. Фунцкию поиска вообще игнорит. ПРосто пропускает ее и ничего с ней не делает. ТОесть ничего не происходит. Буд-то нету ее.
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 22:35 4
Не знаю как у вас, но у меня поиск работает.

Добавлено через 59 секунд
Я закомментировал некоторые ваши функции. Попробуйте изменить ваш main на вот такой.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
void main()
{
    char const* ppath = "c:\\Users\Spaser\Documents\Base_o.txt";//файл в котором хранятся записи
    std::cout << "Dobavlenie zapisi\n";
    Add(ppath);
    Print();   /*
    std::cout << "Redactirovenie zapisi\n";
    Edit(ppath);
    Print();
    std::cout << "Udalenie zapisi\n";
    Edit(ppath, true);
    Print();             */
    Search(ppath);
    system("Pause");
}
Добавлено через 1 минуту
И функция Print() у вас какая-то не понятная. По-моему она даже недописанная.
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:56  [ТС] 5
Цитата Сообщение от Bend3r Посмотреть сообщение
Не знаю как у вас, но у меня поиск работает.

Добавлено через 59 секунд
Я закомментировал некоторые ваши функции.
теперь выдает просто цифры в 2 матрицы
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 22:58 6
Попробуйте очистить ваш файл. Base_o.txt
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:59  [ТС] 7
Цитата Сообщение от Bend3r Посмотреть сообщение
Не знаю как у вас, но у меня поиск работает.

Добавлено через 59 секунд

И функция Print() у вас какая-то не понятная. По-моему она даже недописанная.
а какая должна быть?
П.С. Поиск работает
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 23:04 8
Вы о чем? ("а какая должна быть?")
Просто смотрю функцию print, но она просто связывает лог.переменную с физ. файлом и проверяет в порядке ли файл, но по названию видно что функция для вывода содержимого файла, но у вас она не рабочая. Ладно поиск работает уже хорошо
Кстати функционал у вашей программы ужасный. Придумали бы какое-нибудь меню что-ли.
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:10  [ТС] 9
Цитата Сообщение от Bend3r Посмотреть сообщение
Попробуйте очистить ваш файл. Base_o.txt
http://yadi.sk/d/J4hBNkA3Et2Ut вот что получается

Добавлено через 2 минуты
Цитата Сообщение от Bend3r Посмотреть сообщение
Вы о чем? ("а какая должна быть?")
про принт
Цитата Сообщение от Bend3r Посмотреть сообщение
Просто смотрю функцию print, но она просто связывает лог.переменную с физ. файлом и проверяет в порядке ли файл, но по названию видно что функция для вывода содержимого файла, но у вас она не рабочая.
а что нужно сделать, что бы была рабочая?
Цитата Сообщение от Bend3r Посмотреть сообщение
Кстати функционал у вашей программы ужасный. Придумали бы какое-нибудь меню что-ли.
только начали учить С++, и задали такое задание. Меню не учили. Если сделать с меню, скажут, что кто-то сделал и не защитают(

Добавлено через 1 минуту
и кажись я понял, в чем суть того, что не выводит на екран. ЩАс попробую сделать.
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 23:11 10
У вас в коде творится черти-что.
Во-первых. Вы вводите 2 записи, но поиск делаете по 5.
Во-вторых. Поиск у вас не работает из-за вызова ваше 2 ваших функций.
В третьих. Советую вас создать 1 глобальную переменную допустим num, которая будет отвечать за текущее кол-во записей.

Добавлено через 1 минуту
Не может быть что вы только начали учить С++, и вам сразу дали такое задание. Либо вы прогуливали пары и не учили, либо хз.
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:16  [ТС] 11
Цитата Сообщение от Bend3r Посмотреть сообщение
У вас в коде творится черти-что.
Не может быть что вы только начали учить С++, и вам сразу дали такое задание. Либо вы прогуливали пары и не учили, либо хз.
год учим
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:22  [ТС] 12
Цитата Сообщение от Bend3r Посмотреть сообщение
У вас в коде творится черти-что.
Во-первых. Вы вводите 2 записи, но поиск делаете по 5.
суть в том, что в файле у меня уже есть 3 записи. + еще 2 вводим. Глобальная переменная есть на вводе. n=5 я сделал для цикла. Если не привильно, тогда как в цикл вставить эту глобальную переменную? Вставить ее в main()?
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 23:25 13
Нет, просто объяви переменную ваше выше всех функций.
int num;
и все
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:37  [ТС] 14
что-то такое накидал
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
void Add(char const* ppath, int num)
{
    std::ofstream ofs(ppath, std::ios::app);//открытие файла на запись, арр - сохраняет содержимое файла, если он существует
    if(ofs.bad() != true)//если файл открыт успешно
    {
        
        student tmp;//объявляем имя структуры
        for(int i = 0; i < num; ++i)
        {
            std::cout << "FIO: ";
            std::cin.sync();//очистка буфера потока cin
            std::cin.getline(tmp.name, sizeof(tmp.name));//getline -записывает в перменную n-е кол-во символов, sizeof(tmp.name) - виделяет память под размер (tmp.name)
            std::cin.getline(tmp.fam, sizeof(tmp.fam));
            std::cin.getline(tmp.ot, sizeof(tmp.ot));
            std::cout << "Adres: ";
            std::cin.getline(tmp.adds, sizeof(tmp.adds));
            std::cout << "Vozrast: ";
            std::cin >> tmp.age;
            std::cout << "Gruppa: ";
            std::cin >> tmp.group;
            ofs << tmp.name << '\n' << tmp.adds << '\n' << tmp.age << '\n' << tmp.group << '\n';//запись введённой записи в файл
 
        }
        ofs.close();//закрытие файла
    }
    else
        std::cerr << "Unable to open output file\n";
}
//Вывод файла в консоль
void Print(int num)
{
    struct student a[10];
    int i,j;
        std::cout << "\nVse zapisi:\n";
        std::ifstream ifs("c:\\Users\Spaser\Documents\Base_o.txt");
    if(ifs.bad())
    {
        std::cout<<"error";
    return;
    }
    for(i=0;i<num+3;i++)
    {
    ifs>>a[i].fam;
   ifs>>a[i].name;
   ifs>>a[i].ot;
   ifs>>a[i].adds;
   ifs>>a[i].age;
   ifs>>a[i].group;
   std::cout<<a[i].fam<<"\t"<<a[i].name<<"\t"<<a[i].ot<<"\t"<<a[i].adds<<"\t"<<a[i].age<<"\t"<<a[i].group<<std::endl;
   }
    }
    
//Редактирование или удаление записи. Удаление произойдёт если второй параметр равен true
void Edit(char const* ppath, bool rem = false)
{
    
    std::ifstream ifs(ppath);//открытие файла на чтение
    if(ifs.bad() != true)
    {
        int const arrsize = 500;
        student arr[arrsize];//массив в который будем читать
        int i;
        for(i = 0; i < arrsize; ++i)//чтение из файла в массив
        {
            ifs.getline(arr[i].name, sizeof(arr[i].name)).getline(arr[i].adds, sizeof(arr[i].adds)) >> arr[i].age >> arr[i].group;
            if(ifs.good() != true)
                break;
            ifs.getline(arr[i+1].name, sizeof(arr[i+1].name));//переход на новую строку файла
        }
        ifs.close();
        std::cout << "Vvedite nomer zapisi: ";
        int num;
        std::cin >> num;
        if(rem != true)//если запись не подлежит удалению то вводим новые данные с клавиатуры
        {
            std::cout << "FIO: ";
            std::cin.sync();
            std::cin.getline(arr[num-1].name, sizeof(arr[num-1].name));
            std::cout << "Adres: ";
            std::cin.getline(arr[num-1].adds, sizeof(arr[num-1].adds));
            std::cout << "Vozrast: ";
            std::cin >> arr[num-1].age;
            std::cout << "Gruppa: ";
            std::cin >> arr[num-1].group;
        }
        std::ofstream ofs(ppath);//открытие файла на запись
        for(int j = 0; j < i; ++j)//проход по массиву arr
        {
            if(!((j == num-1) && rem))//если текущая запись не подлежит удалению
                ofs << arr[j].name << '\n' << arr[j].adds << '\n' << arr[j].age << '\n' << arr[j].group << '\n';//запись в файл
        }
        ofs.close();
    }
    else
        std::cerr << "Unable to open input file\n";
}
//Поиск записи в файле
void Search(char const* ppath, int num)
{
    struct student a[10];
    int j, i;
    char first [20];
    std::ifstream ifs(ppath);
    if(ifs.bad() != true)
    {
        for(i=0;i<num+3 ;i++)
   {
   ifs>>a[i].fam;
   ifs>>a[i].name;
   ifs>>a[i].ot;
   ifs>>a[i].adds;
   ifs>>a[i].age;
   ifs>>a[i].group;
   std::cout<<a[i].fam<<"\t"<<a[i].name<<"\t"<<a[i].ot<<"\t"<<a[i].adds<<"\t"<<a[i].age<<"\t"<<a[i].group<<std::endl;
   }
    std::cout<<"vvedite familiyu dlya poiska\n";
    std::cin>>first;
   j=0;
   for(i=0;i<num+3;i++)
   if(strcmp (a[i].fam, first)==0)
   {
   std::cout<<"\n FIO:\n "<<a[i].fam<<" "<<a[i].name<<" "<<a[i].ot<<"\n age="<<a[i].age<<"\n adress="<<a[i].adds<<"\n group - "<<a[i].group;
  j=1;
 }
 if(j==0)
    std::cout<<"\n zapisey net"<<std::endl;
    }
}  
   void main()
{
     int num;
    char const* ppath = "c:\\Users\Spaser\Documents\Base_o.txt";//файл в котором хранятся записи
    std::cout << "Vvedite chislo zapisey: ";
       //вводим количество записей
        std::cin >> num;
    std::cout << "Dobavlenie zapisi\n";
    Add(ppath, num);
    Print(num);   
    std::cout << "Redactirovenie zapisi\n";
    Edit(ppath);
    Print(num);
    std::cout << "Udalenie zapisi\n";
    Edit(ppath, true);
    Print(num);         
    Search(ppath, num);
    system("Pause");
}
все равно print выдает ахинею
0
150 / 137 / 35
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 23:53 15
Цитата Сообщение от Веталя Посмотреть сообщение
int num;
Объявляй переменную выше всех функций, я же писал выше.
Прям после #include напиши int num;
И поубирай везде объявления переменной num.

Добавлено через 36 секунд
Цитата Сообщение от Веталя Посмотреть сообщение
num+3
Это для чего?
0
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
25.12.2013, 00:04  [ТС] 16
Цитата Сообщение от Bend3r Посмотреть сообщение

Это для чего?
это для цикла. Я ж пишу сначало число записей, котрое хочу ввеси (новых), при этом в файле уже есть 3 записи. Иначе цикл будет крутить лишь то колличесво записей, корое я ввел (новых), а уже сущесвующие не будет трогать. Если не так, то я не поинмаю, поясните или напишите, как должно быть. А я там уже сам розберусь.
0
25.12.2013, 00:04
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
25.12.2013, 00:04
Помогаю со студенческими работами здесь

Не работают русские буквы в коде
Всем привет. Задание такое: Написать функцию, которая возвращает True, если символ, полученный...

Не работают сокеты на локалхосте. Дело не в коде!
Доброго времени товарищи! Вобщем дело такое, не понятное. У меня на lamp значит написал код с...

Ошибка в коде . не работают горячие клавиши
&lt;br&gt; Образование: &lt;br&gt; &lt;input type=&quot;radio&quot; name=&quot;education&quot; value=&quot;educ1&quot;...

не работают скобки в коде при создании tshape
вот код //--------------------------------------------------------------------------- void...

Обьясните , как работают эти строчки в данном коде : с
Что озночают или что делают эти строки в данном коде ? Это программа , которая стирает первые два...

Как работают конструктор и статические поля в этом коде?
using System; namespace Test_C_{ class Entity{ static int nextSerialNo; int serialNo;...


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

Или воспользуйтесь поиском по форуму:
16
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru