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

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

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

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

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

Доброе время суток!
У меня такая проблема. Есть програма, и в ней не работают 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
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
24.12.2013, 22:19
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Не работают 2 функции в коде (C++):

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

Не работают функции <math.h> в методе (функции-члене) - C++
Сделал программу которая решает по формуле задачу. Все работает, но стоило вынести нахождение y в функцию, как компилятор стал писать...

Не работают friend функции - C++
Есть класс Student, где объявлены дружественные функции: #pragma once #include &lt;iostream&gt; #include &lt;string&gt; #include &lt;valarray&gt; ...

WNet функции не работают - C++
Здравствуйте. Пытаюсь воспользоваться WNet функцией: #include &quot;stdafx.h&quot; #include &quot;windows.h&quot; #include &quot;iostream&quot; using namespace...

Не работают функции в классе - C++
#include &lt;iostream&gt; #include &lt;conio.h&gt; #include &quot;nasled.h&quot; using namespace std; int main() { setlocale(LC_ALL,...

Не работают тригонометрические функции - C++
Добрый день. Подскажите,пожалуйста, почему в данном коде не работают sin и cos? #include &lt;math.h&gt; #include &lt;iostream&gt; #include...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 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
Bend3r
149 / 136 / 18
Регистрация: 29.07.2012
Сообщений: 709
24.12.2013, 23:53 #15
Цитата Сообщение от Веталя Посмотреть сообщение
int num;
Объявляй переменную выше всех функций, я же писал выше.
Прям после #include напиши int num;
И поубирай везде объявления переменной num.

Добавлено через 36 секунд
Цитата Сообщение от Веталя Посмотреть сообщение
num+3
Это для чего?
0
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
24.12.2013, 23:53
Привет! Вот еще темы с ответами:

Не работают функции класса - C++
Здравствуйте! При написании консольного калькулятора столкнулся с проблемой. Все функции (сложение, деление, возведение в степени,...

Не работают функции inport и outport - C++
Всем здравствуйте. Пишу код который должен будет выполняться под 16-битной DOS. Пишу его в Borland C++ 5.02. Подключаю &quot;dos.h&quot; в котором...

Не понятно как работают функции - C++
bool isstrprint (const char s) { int i = -1, ls = strlen(s); bool rc = true; if (s != 0x00) { while (i &lt;= ls &amp;&amp;...

как работают эти 4 функции - C++
Подскажите как работают эти 4 функции CTime CTime::operator ++() CTime CTime::operator --() CTime CTime::operator ++(int) CTime...


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

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

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