0

我有全局变量。我想使用 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 一起使用。请帮我解决一下这个。谢谢你。

4

3 回答 3

2

在你的头文件中,你需要声明变量“extern”;IE,extern char username[50];

这意味着“这是变量的类型和名称,但它是在其他地方定义的”。

如果你在没有“extern”的情况下声明它,那么每个包含头文件的文件都会以一个名为“username”的全局变量结束,如果你幸运的话,那么你的链接器会抱怨重复变量。

除了在头文件中声明它为“extern”外,您还需要在一个源文件中声明它(而不是 extern)。

于 2012-12-06T18:58:49.137 回答
2

不要使用纯字符数组来存储字符串,使用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;
于 2012-12-06T19:00:21.173 回答
1

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()
}
于 2012-12-06T19:01:13.293 回答