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

Написанная программа не компилируется, не могу понять в чем дело

11.10.2016, 16:17. Просмотров 195. Ответов 14
Метки нет (Все метки)

Есть три файла в одном проекте:
main.cpp
cyber.cpp
cyber.h

//main.cpp:
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
#include <iostream>
#include "cyber.h"
 
using namespace std;
 
int main(){
    int total, station[total], size=1;
    User *user = new User[size];
    cout << "Enter Total Lab Number: ";
    cin >> total;
    char *** lab = new char **[total];
    for(int x=0; x<total; x++){
        cout << "Enter total computer in Lab " << x+1 << ": ";
        cin >> station[x];
        lab[x] = new char *[station[x]];
        for(int y=0; y<station[x]; y++){
            //strcpy(lab[x][y], "empty"); //segmentation error
            lab[x][y] = (char*)&"empty";
        }
    }
 
    //Display the computer lab info
    displayLab(lab, total, station);
 
    double totalCharge = 0;
    int option;
    while(true){
        //Display the menu in proper formatting
        cout << "\t\tCyber Cafe Menu" << endl
            << "1. Log in" << endl
            << "2. Log out" << endl
            << "3. Search user" << endl
            << "4. List lab" << endl
            << "5. Display total charges" << endl
            << "0. Exit" << endl;
        cout << "Option: ";
        cin >> option; // read choice from user
        switch(option){
            case 1: // Log in
                login(lab, total, station, user, size);
                displayLab(lab, total, station); //Display the computer lab info
                break;
            case 2: // Log out
                logout(lab, user, size, totalCharge);
                break;
            case 3: // Search user
                search(user, size);
                break;
            case 4: // List Lab
                list(lab, total, station);
                break;
            case 5: // Display total charges
                displayTotal(totalCharge);
                break;
            case 0: // close the program
                cout << "Program terminated." << endl << endl;
                return 0;
            default: // re-prompt user the menu
                cout << "Wrong input, please try again." << endl << endl;
        }
    }
}
//cyber.cpp:

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
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
#include "fstream"
#include <iostream>
#include "cyber.h"
using namespace std;
// This function Log in new user
void login(char ***lab, int total, int station[], User *&user, int &size){
    User *newUser = new User; //create a struct to store the new user temporarily
    bool valid = false;
    //read data from user
    while(valid == false){
        valid = true;
        cout << "Enter 5-digit ID: ";
        cin >> newUser->id;
        //if the id is existed in the user[]
        for(int x=0;x<size;x++){
            if(strcmp(newUser->id, user[x].id) == 0){
                //inform client and reprompt
                cout << "ID existed, please try again." << endl;
                valid = false;
                break;
            }
        }
    }
    valid = false;
    char *empty;
    empty = (char*)&"empty";
    while(valid == false){
        cout << "Enter Lab: ";
        cin >> newUser->lab;
        cout << "Enter Station: ";
        cin >> newUser->station;
        //check for the lab
        for(int x=0; x<total; x++)
            if(newUser->lab == x+1)
                //check for the station
                for(int y=0; y<station[x]; y++)
                    if(newUser->station == y+1)
                        //when the station is empty, then only assign it to user.
                        if(strcmp(lab[x][y], empty) == 0){
                            lab[x][y] = newUser->id;
                            valid = true;
                        } else {
                            cout << "The Lab Station Computer is occupied.\n";
                        }
    }
    valid = false;
    //ask client to input the login time
    while(valid == false){
        cout << "Login Time(HH MM): ";
        cin >> newUser->inHour >> newUser->inMin;
        valid = true;
        if(newUser->inHour > 23 || newUser->inMin > 59){
            valid = false;
            cout << "The time is in 24hours format. please try again." << endl;
        }
    }
    //when user[] is null, perform if
    //if there is info in id, perform else
    if(strcmp(user[0].id, "") == 0){
        user[0] = *newUser;
    } else {
        size+=1; //increase size
        User *temp = new User[size]; //create temp User struct
        for(int x=0; x<size;x++){
            temp[x] = user[x]; //assign all old user[] data to temp[]
            if(x == size-1){
                temp[size-1] = *newUser; //last location for the new user
            }
        }
        user = temp; //assign the data to user[]
    }
}
// This function is used to Log out user that is leaving
void logout(char ***lab, User *&user, int &size, double &totalCharge){
    int target;
    char id[6];
    bool valid = false;
    //read id from user
    while(valid == false){
        cout << "Enter 5-digit ID: ";
        cin >> id;
        for(int x=0;x<size;x++){
            if(strcmp(id, user[x].id) == 0){
                target = x; //when the user is found, set x to target
                valid = true;
                break;
            }
        }
    }
    valid = false;
    //prompt client to input the log out time
    while(valid == false){
        cout << "Logout Time(HH MM): ";
        cin >> user[target].outHour >> user[target].outMin;
        valid = true;
        if(user[target].outHour > 23 || user[target].outMin > 59){
            valid = false;
            cout << "The time is in 24hours format. please try again." << endl;
        }
    }
    //edit the lab table
    strcpy(lab[user[target].lab-1][user[target].station-1], (char*)&"empty");
    //calculate charges in minutes, each minutes = RM0.02
    int login = user[target].inHour *60 + user[target].inMin;
    int logout = user[target].outHour *60 + user[target].outMin;
    // if the logout time is smaller than login time,
    //logout time have to add 24hours as it had passed a day
    if(logout < login){
        logout = logout + (24 * 60);
    }
    user[target].price = (logout - login) * 0.02;
    //print the payment details
    cout << "Payment Amount: RM" << user[target].price << endl << endl;
    //increase total charge
    totalCharge += user[target].price;
    //write the logout info to log file.
    ofstream logfile("log.txt", ios::app);
    logfile << "\n" << user[target].id << ":"
            << user[target].lab << ":"
            << user[target].station << ":"
            << user[target].inHour << "." << user[target].inMin << ":"
            << user[target].outHour << "." << user[target].outMin << ":"
            << user[target].price;
    logfile.close();
 
    //set the user[] smaller
    size-=1;
    // create a temp User struct to store the data without logout user
    User *temp = new User[size];
    for(int x=0; x<size;x++){
        temp[x] = user[x];
        if(x >= target){
            temp[x] = user[x+1];
        }
    }
    user = temp; // user User struct point to temp User struct.
}
// This function is used to Search user by the user id
void search(User user[], int &size){
    char id[6];
    bool valid = false;
    //read data from user
    cout << "Enter 5-digit ID: ";
    cin >> id;
    //search from the user[], if the id matched, print out the user current session info
    for(int x=0;x<size;x++){
        if(strcmp(id, user[x].id) == 0){
            cout << "User ID: " << user[x].id << endl
                << "Lab:\t" << user[x].lab << endl
                << "Station: " << user[x].station << endl
                << "Login Time: " << user[x].inHour << ":" << user[x].inMin << endl << endl;
            valid = true;
            break;
        }
    }
    //if the id is not found in the user[], tell client.
    if(valid == false){
        cout << "User ID: " << id << " not found!" << endl << endl;
    }
}
 
//This function allow the user to choose particular lab for display purposes.
void list(char ***lab, int total, int station[]){
    int num;
    //prompt user to enter lab number
    cout << "Enter Lab number: ";
    cin >> num;
    //if the lab number is not in range, reprompt.
    while(num > total || num <= 0){
        cout << "Lab number not found!" << endl;
        cout << "There is " << total << " lab in this cyber cafe." << endl;
        cout << "Enter Lab number: ";
        cin >> num;
    }
    //formating - Lab: Stations
    cout << "Lab Number\tComputer Stations" << endl
        <<  "----------\t--------------------------------------------" << endl;
    cout << '\t' << num << '\t'; // display lab
    for(int y=0; y<station[num-1]; y++){
        cout << y+1 << ": " << lab[num-1][y] << '\t'; //display station
    }
    cout << endl << "----------\t--------------------------------------------" << endl;
}
 
//This function is used to display total charges of the cyber cafe at particular session
void displayTotal(double totalCharge){
    cout << "Total charges of this session is RM" << totalCharge << endl << endl;
}
 
//This function is used to display the full details of the cyber cafe
void displayLab(char ***lab, int total, int station[]){
    //formating - Lab: Stations
    cout << "Lab Number\tComputer Stations" << endl
        <<  "----------\t--------------------------------------------" << endl;
    for(int x=0; x<total; x++){
        cout << '\t' << x+1 << '\t'; // display lab
        for(int y=0; y<station[x]; y++){
            cout << y+1 << ": " << lab[x][y] << '\t'; //display station
        }
        cout << endl;
    }
    cout << "----------\t--------------------------------------------" << endl;
}
//cyber.h:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
#include <cstring>
using namespace std;
 
struct User{
    char id[6];
    int lab, station, inHour, inMin, outHour, outMin;
    float price;
};
 
void login(char***, int, int[], User*&, int&); // Log in
void logout(char***, User*&, int&, double&); // Log out
void search(User[], int&); // Search user
void list(char***, int, int[]); // List Lab
void displayTotal(double); // Display total charges
void displayLab(char***, int, int[]); // Display the computer lab info
уже как пол дня потратил, чтобы понять почему не компилируется, но так и не понял в чем дело. Ошибок в коде нету, да и все файлы в одном проекте, кириллиц на пути нету
Почему не компилируется? Подскажите кто нибудь

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.10.2016, 16:17
Ответы с готовыми решениями:

не могу понять в чем дело
In file included from /usr/local/lib/gcc47/include/c++/csignal:44:0, ...

Не работают перечни, не могу понять в чем дело
#include &quot;stdafx.h&quot; #include &lt;iostream&gt; #include &lt;conio.h&gt; #include...

Вывод строки. Не могу понять, в чем дело
Добрый вечер. В программе на вход подается строка типа &quot;слово1-слово2&quot;,...

Вызов перегруженной функции не могу понять в чем дело?
#include &lt;iostream&gt; #include &lt;time.h&gt; #include &lt;stdio.h&gt; using namespace...

Не могу понять в чем дело. Машинный код" завершилась с кодом 0 (0x0)
#include &lt; iostream &gt; using namespace std; struct coord { int x, y; };...

14
Max Dark
шКодер самоучка
1919 / 1719 / 846
Регистрация: 09.10.2013
Сообщений: 3,795
Записей в блоге: 6
Завершенные тесты: 2
11.10.2016, 16:19 #2
Цитата Сообщение от almazuulu Посмотреть сообщение
Почему не компилируется?
ошибку хоть какую выдает при компиляции?
0
hoggy
Заблокирован
11.10.2016, 16:24 #3
Цитата Сообщение от almazuulu Посмотреть сообщение
уже как пол дня потратил, чтобы понять почему не компилируется, но так и не понял в чем дело. Ошибок в коде нету
помойму последнее предложение противоречит первому, не?

http://rextester.com/VAWIJ69431
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
11.10.2016, 16:25 #4
Цитата Сообщение от almazuulu Посмотреть сообщение
Ошибок в коде нету
Цитата Сообщение от almazuulu Посмотреть сообщение
Почему не компилируется?
Что значит - не компилируется?
0
Max Dark
шКодер самоучка
1919 / 1719 / 846
Регистрация: 09.10.2013
Сообщений: 3,795
Записей в блоге: 6
Завершенные тесты: 2
11.10.2016, 16:29 #5
almazuulu, без проблем собрал и запустил ваш код
возможны проблемы из за отсутствия include guard в cyber.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#ifndef CYBER_H
#define CYBER_H
#include <iostream>
#include <cstring>
using namespace std;
 
struct User{
    char id[6];
    int lab, station, inHour, inMin, outHour, outMin;
    float price;
};
 
void login(char***, int, int[], User*&, int&); // Log in
void logout(char***, User*&, int&, double&); // Log out
void search(User[], int&); // Search user
void list(char***, int, int[]); // List Lab
void displayTotal(double); // Display total charges
void displayLab(char***, int, int[]); // Display the computer lab info
 
#endif
0
Миниатюры
Написанная программа не компилируется, не могу понять в чем дело  
almazuulu
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 77
Завершенные тесты: 1
11.10.2016, 16:33  [ТС] #6
Max Dark,hoggy, nd2,Тупо выдает вот такое сообщение:
0
Миниатюры
Написанная программа не компилируется, не могу понять в чем дело  
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
11.10.2016, 16:44 #7
Цитата Сообщение от almazuulu Посмотреть сообщение
Почему не компилируется?
Цитата Сообщение от almazuulu Посмотреть сообщение
Тупо выдает вот такое сообщение:
Это называется: компилируется, но не работает. Среда какая? Отладчиком умеешь пользоваться?
1
almazuulu
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 77
Завершенные тесты: 1
11.10.2016, 16:48  [ТС] #8
nd2, Среда CodeBlocks, отладчиком похоже не умею
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
11.10.2016, 16:53 #9
В меню что выбираешь?
0
almazuulu
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 77
Завершенные тесты: 1
11.10.2016, 16:56  [ТС] #10
nd2, Просто build and run. Извините что я такой, я просто зеленый еще, не все понимаю
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
11.10.2016, 16:56 #11
Цитата Сообщение от almazuulu Посмотреть сообщение
int total, station[total]
total неинициализированна, а ты задаёшь ею размер массива.
0
almazuulu
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 77
Завершенные тесты: 1
11.10.2016, 17:01  [ТС] #12
Max Dark, а вы там ничего не меняли? У меня точно также как и у вас но никак не получается все равно
0
nd2
2828 / 2398 / 1054
Регистрация: 29.01.2016
Сообщений: 8,022
11.10.2016, 17:31 #13
Для начала так сделай:
C++
1
2
3
4
5
6
7
8
9
int main(){
    int total, size=1;
    User *user = new User[size];
    cout << "Enter Total Lab Number: ";
    cin >> total;
    int* station = new int[total];
    char *** lab = new char **[total];
    for(int x=0; x<total; x++){
    //...
1
almazuulu
0 / 0 / 0
Регистрация: 04.10.2015
Сообщений: 77
Завершенные тесты: 1
11.10.2016, 17:34  [ТС] #14
nd2, спасибо, попробую )
0
Max Dark
шКодер самоучка
1919 / 1719 / 846
Регистрация: 09.10.2013
Сообщений: 3,795
Записей в блоге: 6
Завершенные тесты: 2
11.10.2016, 18:03 #15
Цитата Сообщение от almazuulu Посмотреть сообщение
а вы там ничего не меняли?
не менял. собирал g++ 6й версии для 64х бит.

Добавлено через 2 минуты
Сейчас попробовал собрать для 32х бит - собралось, но упало.
Посмотрел код - лучше используйте std::string для строк и std::vector для массивов
0
11.10.2016, 18:03
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
11.10.2016, 18:03

Ошибка памяти при выполнении - не могу понять в чём дело
Добрый день. Есть следующий код: #include &lt;iostream&gt; using namespace std; ...

Вывести N-е полупростое число (программа постоянно выводит число 4; не могу понять в чем ошибка)
ПОМОГИТЕ ПОЖАЛУЙСТА НАЙТИ ОШИБКУ! #include &lt;stdio.h&gt; #include &quot;fstream&quot; ...

Массив: ошибка, не могу понял в чем дело
Вот программа: #include &lt;stdio.h&gt; #include &lt;conio.h&gt; #include &lt;math.h&gt;...


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

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

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