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

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

Восстановить пароль Регистрация
 
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:19     Не работают 2 функции в коде #1
Доброе время суток!
У меня такая проблема. Есть програма, и в ней не работают 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 минут
есть какие мысли?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
24.12.2013, 22:25     Не работают 2 функции в коде #2
В каком смысле не работают? Не правильно написаны, либо ищет, но находит не то что нужно. Более подробно опишите.
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:32  [ТС]     Не работают 2 функции в коде #3
Цитата Сообщение от Bend3r Посмотреть сообщение
В каком смысле не работают? Не правильно написаны, либо ищет, но находит не то что нужно. Более подробно опишите.
просто не работают. Вывод на екран доходит до "std::cout << "\nVse zapisi:\n";" и пропускает остальное. Фунцкию поиска вообще игнорит. ПРосто пропускает ее и ничего с ней не делает. ТОесть ничего не происходит. Буд-то нету ее.
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
24.12.2013, 22:35     Не работают 2 функции в коде #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() у вас какая-то не понятная. По-моему она даже недописанная.
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 22:56  [ТС]     Не работают 2 функции в коде #5
Цитата Сообщение от Bend3r Посмотреть сообщение
Не знаю как у вас, но у меня поиск работает.

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

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

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

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

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

Добавлено через 1 минуту
Не может быть что вы только начали учить С++, и вам сразу дали такое задание. Либо вы прогуливали пары и не учили, либо хз.
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:16  [ТС]     Не работают 2 функции в коде #11
Цитата Сообщение от Bend3r Посмотреть сообщение
У вас в коде творится черти-что.
Не может быть что вы только начали учить С++, и вам сразу дали такое задание. Либо вы прогуливали пары и не учили, либо хз.
год учим
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:22  [ТС]     Не работают 2 функции в коде #12
Цитата Сообщение от Bend3r Посмотреть сообщение
У вас в коде творится черти-что.
Во-первых. Вы вводите 2 записи, но поиск делаете по 5.
суть в том, что в файле у меня уже есть 3 записи. + еще 2 вводим. Глобальная переменная есть на вводе. n=5 я сделал для цикла. Если не привильно, тогда как в цикл вставить эту глобальную переменную? Вставить ее в main()?
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
24.12.2013, 23:25     Не работают 2 функции в коде #13
Нет, просто объяви переменную ваше выше всех функций.
int num;
и все
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
24.12.2013, 23:37  [ТС]     Не работают 2 функции в коде #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 выдает ахинею
Bend3r
 Аватар для Bend3r
142 / 129 / 17
Регистрация: 29.07.2012
Сообщений: 687
24.12.2013, 23:53     Не работают 2 функции в коде #15
Цитата Сообщение от Веталя Посмотреть сообщение
int num;
Объявляй переменную выше всех функций, я же писал выше.
Прям после #include напиши int num;
И поубирай везде объявления переменной num.

Добавлено через 36 секунд
Цитата Сообщение от Веталя Посмотреть сообщение
num+3
Это для чего?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
25.12.2013, 00:04     Не работают 2 функции в коде
Еще ссылки по теме:

C++ как работают эти 4 функции
C++ 2 функции по перестановке векторов работают некорректно
C++ Как работают функции fwrite и fread

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

Или воспользуйтесь поиском по форуму:
Веталя
1 / 1 / 0
Регистрация: 24.09.2012
Сообщений: 54
25.12.2013, 00:04  [ТС]     Не работают 2 функции в коде #16
Цитата Сообщение от Bend3r Посмотреть сообщение

Это для чего?
это для цикла. Я ж пишу сначало число записей, котрое хочу ввеси (новых), при этом в файле уже есть 3 записи. Иначе цикл будет крутить лишь то колличесво записей, корое я ввел (новых), а уже сущесвующие не будет трогать. Если не так, то я не поинмаю, поясните или напишите, как должно быть. А я там уже сам розберусь.
Yandex
Объявления
25.12.2013, 00:04     Не работают 2 функции в коде
Ответ Создать тему
Опции темы

Текущее время: 01:15. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru