我有全局变量。我想使用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。请帮我解决一下这个。谢谢。
答案 0 :(得分:2)
在头文件中,您需要声明变量“extern”;即,extern char username[50];
这意味着“这是变量的类型和名称,但它在其他地方定义了”。
如果你声明它没有“extern”,那么包含你的头文件的每个文件最终会得到一个名为“username”的全局变量,如果你很幸运,那么你的链接器会抱怨重复的变量。 / p>
在头文件中将其声明为“extern”,您需要在一个源文件中声明它(不是extern)。
答案 1 :(得分: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;
答案 2 :(得分:1)
main
功能是您的程序开始的地方。程序启动时你要做的第一件事是:
cout << username;
这将立即输出username
的内容,此时您尚未填写用户名。在开始输出用户名之前,请确保执行用户输入。这(如果我的心灵能力是正确的)将需要调用你在login.cpp中定义的函数。因此无论调用哪个函数,都要调用它:例如:
int main()
{
login();
cout << username << endl;
}
在你的login.cpp文件中,你有这个if-else语句没有任何封闭函数。我不确定这是否因为你只复制了部分文件,但这些语句需要在一个函数内。如果要在其他文件中使用该函数,则可能需要在头文件中声明该函数。
要在不同的翻译单元之间共享username
全局变量,您需要在头文件中将其声明为extern char username[50]
,然后仅将其定义为{{1}中的一个实现文件中的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()
}