C++ 如何在函数中使用主变量?

C++ 如何在函数中使用主变量?,c++,C++,我有一个函数,但我不能定义任何内部变量和全局变量。此函数从用户处获取一个char值。我需要为main函数定义这个值。我怎么做?谢谢你帮了大家 这是我的密码。我是这样做的,但我在全局中定义变量,但我只需要在main中定义变量 #include <iostream> using namespace std; char cName[255], cSurname[255]; bool nameFunc() { cout << "Whats Your Na

我有一个函数,但我不能定义任何内部变量和全局变量。此函数从用户处获取一个char值。我需要为main函数定义这个值。我怎么做?谢谢你帮了大家

这是我的密码。我是这样做的,但我在全局中定义变量,但我只需要在main中定义变量

#include <iostream>

using namespace std;

char cName[255], cSurname[255];

bool nameFunc() {

    cout << "Whats Your Name ?\n";
    cin >> cName;
    if (cName != NULL && cName[0] == '\0') {
        return false;
    }
    else {
        return true;
    }
}

bool surnameFunc() {
    cout << "Whats Your Surname ?\n";
    cin >> cSurname;
    if (cSurname != NULL && cSurname[0] == '\0') {
        return false;
    }
    else {
        return true;
    }
}

int main() {
    if (nameFunc() and surnameFunc()) {
        cout << "Hello, " << cName << " " << cSurname << "." << endl;
    }
    else {
        cout << "Error! Name or Surname is empty." << endl;
    }
    system("PAUSE");
    return 0;
}
#包括
使用名称空间std;
char cName[255],cSurname[255];
bool nameFunc(){
cout>cName;
如果(cName!=NULL&&cName[0]='\0'){
返回false;
}
否则{
返回true;
}
}
布尔姓func(){
cout>cSurname;
如果(cSurname!=NULL&&cSurname[0]='\0'){
返回false;
}
否则{
返回true;
}
}
int main(){
if(nameFunc()和nameFunc()){

难道这就是你要找的吗

#include <iostream>

using namespace std;

bool nameFunc(char* cName) {

    cout << "Whats Your Name ?\n";
    cin >> cName;
    if (cName != NULL && cName[0] == '\0') {
        return false;
    }
    else {
        return true;
    }
}

bool surnameFunc(char* cSurname) {
    cout << "Whats Your Surname ?\n";
    cin >> cSurname;
    if (cSurname != NULL && cSurname[0] == '\0') {
        return false;
    }
    else {
        return true;
    }
}

int main() {
    char cName[255], cSurname[255];
    if (nameFunc(cName) and surnameFunc(cSurname)) {
        cout << "Hello, " << cName << " " << cSurname << "." << endl;
    }
    else {
        cout << "Error! Name or Surname is empty." << endl;
    }
    system("PAUSE");
    return 0;
}
#包括
使用名称空间std;
bool nameFunc(char*cName){
cout>cName;
如果(cName!=NULL&&cName[0]='\0'){
返回false;
}
否则{
返回true;
}
}
布尔姓氏func(char*cSurname){
cout>cSurname;
如果(cSurname!=NULL&&cSurname[0]='\0'){
返回false;
}
否则{
返回true;
}
}
int main(){
char cName[255],cSurname[255];
if(nameFunc(cName)和nameFunc(cSurname)){

cout您可以将变量的引用传递给函数。由于
char[]
具有固定的长度,因此您需要确保不会写得越界,这会使事情变得复杂

例如:

#include <iostream>

template<size_t N>
bool nameFunc(char (&cName)[N]) {
    std::cout << "Whats Your Name ?\n";
    std::cin.getline(cName, N);            // read at most N chars
    return cName[0] != '\0';
}

template<size_t N>
bool surnameFunc(char (&cSurname)[N]) {
    std::cout << "Whats Your Surname ?\n";
    std::cin.getline(cSurname, N);         // read at most N chars
    return cSurname[0] != '\0';
}

int main() {
    char cName[255], cSurname[255];

    if (nameFunc(cName) and surnameFunc(cSurname)) {
        std::cout << "Hello, " << cName << " " << cSurname << ".\n";
    }
    else {
        std::cout << "Error! Name or Surname is empty.\n";
    }
}
#包括
模板
bool nameFunc(字符(&cName)[N]){

std::难道我不认为讽刺有帮助吗,@Sam。请用您尝试过的代码和收到的任何编译器错误显示a。@eally root好的,请注意不要使用
std::string
?这是为了我的学业。老师没有教我们std::string,这就是他不想使用的原因。@eally root好的,注意把
cin>
变成a
char*
使用它,看起来它会在C++20中被更改,因为它不安全,而且使用它会导致很多实际问题,所以不要这样做。请向您的老师寻求一个安全的替代方法。(新的C++20重载会引用数组,因此可以安全使用)
cin>
char*
是一个非常糟糕的主意。它无法知道数组的结束位置,因此它可以写越界。不要这样做,即使它看起来现在解决了您的问题。更糟糕的是,您的代码在将非空指针作为字符串写入这些指针后正在检查这些指针。在这一点上,损坏已经完成如果指针是“代码> null <代码>,则从<代码> CIN < /代码>中流到它有未定义的行为,因此在事后检查它是没有意义的。C++有一种原因,比如“代码> STD::String ”,避免这种可怕的技术。@ TedLyngmo,我只是回答这个问题,我没有尝试重新AR。范围代码,当然你的所有点都是有效的,你的解决方法better@PhM75在C++20中,
operator>
的重载实际上看起来像这样:
istream&operator>>(istream&st,char&s)[N]);
。我不确定获取
char*
的重载是否仍然有效(出于上述原因)但是OP使用
char*
时引入
char[255]
会使它比原始代码(即C++20)更糟糕。在C++17中,OP:s代码和您的代码同样不安全。