Глобальная переменная с символом
У меня есть глобальная переменная. Я хочу использовать тип данных char, чтобы я мог вставить в него имя пользователя. Пока это не работает.
В main.cpp
#include "Functions.h"
using namespace std;
char username[50];
int main()
{
cout << username;
}
В Functions.h
char username[50];
В login.cpp
#include "Functions.h"
if(std::strcmp(emp_username, "admin") == 1) {
username = "admin";
}
else
{
username = emp_username;
}
Я хочу получить имя пользователя сотрудника и отобразить его в каждой функции. Работает с типом данных int. Только я не знаю, как использовать его с char. Пожалуйста, помогите мне с этим. Спасибо.
3 ответа
Не используйте массивы простых символов для хранения строк, используйте std::string
учебный класс:
std::string username;
std::string emp_username;
// Note that this is rather pointless, since it's equivalent to
// username = emp_username;
// but I'll leave it as it is to demonstrate how "string" works.
if (emp_username == "admin") {
username = "admin";
} else {
username = emp_username;
}
Если у вас есть какое-то странное требование, которое заставляет вас использовать простые массивы, то сравните, используя:
if (std::strcmp(emp_username, "admin") == 0) // NOT 1
и содержимое не может быть назначено с помощью =
; вам нужны библиотечные функции:
username[sizeof username - 1] = 0;
std::strncpy(username, emp_username, sizeof username);
if (username[sizeof username - 1] != 0) {
// Whoops! The buffer was too small. Handle the error somehow.
}
Наконец, если у вас должна быть глобальная переменная (что почти всегда является очень плохой идеей), вам нужно объявить ее extern
в шапке:
extern std::string username;
В вашем заголовочном файле вам нужно объявить переменную "extern"; т.е. extern char username[50];
Это означает "Вот тип и имя переменной, но она определена где-то еще".
Если вы объявите это без "extern", то каждый файл, который включает ваш заголовочный файл, будет иметь глобальную переменную с именем "username", и, если вам повезет, ваш компоновщик будет жаловаться на дублирующиеся переменные.
Наряду с объявлением его "extern" в вашем заголовочном файле, вы должны объявить его (не extern) в одном исходном файле.
main
функция, где ваша программа начинается. Первое, что вы делаете при запуске программы:
cout << username;
Это немедленно выведет содержимое username
, который на данный момент вы не заполнили с именем пользователя. Убедитесь, что вы вводите пользователя, прежде чем начать выводить имя пользователя. Это (если мои экстрасенсорные способности верны) потребует вызова функции, которую вы определяете в login.cpp. Так что как бы эта функция ни вызывалась, вызывайте ее: например:
int main()
{
login();
cout << username << endl;
}
В вашем файле login.cpp есть оператор if-else без какой-либо включающей функции. Я не уверен, что это только потому, что вы скопировали только часть файла, но эти операторы должны быть внутри функции. Возможно, вам потребуется объявить эту функцию в заголовочном файле, если вы хотите использовать ее в других файлах.
Поделиться username
Глобальная переменная между различными единицами перевода, вам нужно будет объявить ее в заголовочном файле, так как extern char username[50]
а затем определить его только в одном из ваших файлов реализации как char username[50]
,
Я, однако, не рекомендую использовать глобальную переменную для этого и предлагаю вам использовать std::string
вместо char
массивы. Вы можете просто return
имя пользователя из login
функционировать и сделать что-то вроде этого:
int main()
{
std::string username = login();
std::cout << username << std::endl;
}
В отношении комментариев к этому посту:
std::string login()
{
// Here we get the user's username and return it back to main
std::string username;
std::cin >> username;
return username;
}
void menu(std::string username)
{
std::cout << "Welcome " << username << std::endl;
}
int main()
{
std::string username = login(); // We receive the username from login()
menu(username); // We pass the username we received to menu()
}