Глобальная переменная с символом

У меня есть глобальная переменная. Я хочу использовать тип данных 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()
}
Другие вопросы по тегам