想知道C++中的结构和函数的作用域
Wondering about scope in C++ with structures and functions
我正在编写一个程序,该程序允许我输入自己的名字,列出不同的学期,并允许我输入成绩,然后能够计算我的班级平均成绩和平均成绩,仅供我自己在课程中参考。
我遇到的问题是结构以及它们如何与多功能程序一起工作。在我的课程中,我们没有涵盖这一点,我花了一段时间寻找答案,但找不到答案。以下是我当前的代码:
using namespace std;
#include <iostream>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
char gettingName();
class Student{
public:
double semesterClass[20][20]; //first is for semester, second is for which class
char name[20];
int semester;
int numOfCourses;
};
int main(int argc, char **argv)
{
Student info;
gettingName();
cout << "Hi my name is: " << name.info << endl;
return 0;
}
char gettingName()
{
Student info;
char YesNo[5];
char boolean[1] = {'T'};
char yes[3] = {'Y','e','s'};
char yes2[3] = {'Y','E','S'};
char yes3[3] = {'y','e','s'};
char yes4[1] = {'Y'};
char yes5[1] = {'y'};
while(boolean[0] == 'T'){
cout << "What is your name? ";
cin >> info.name;
cout << endl;
cout << "Is your name " << info.name << "?"<<endl; //accepted input will be Y,y,YES,Yes,yes
cin >> YesNo;
//if input does not equal any of the accepted inputs, then loop until it does
if((strcmp(YesNo,yes) == 0) || (strcmp(YesNo,yes2) == 0) || (strcmp(YesNo,yes3) == 0) || (YesNo[0] == yes4[0]) || (YesNo[0] == yes5[0])){
boolean[0] = 'F';
}
}
return 0;
}
我的问题是:我该如何修复作用域,这样我就可以调用"gettingName"函数,让人输入他们的名字(正确地输入(这已经有效了)),然后能够在主函数中访问和打印它?
您的代码有很多问题,但我会尽我所能提供帮助。一般来说,局部变量的C++作用域在块级别。因此,每当您看到结束括号}时,作用域就结束了。
我注意到你的代码中的一些特定问题:
-
这一行应该是:"cout<<"嗨,我的名字是:"<<info.name<endl;",不是的名称
-
可以更有效地处理布尔循环。您应该尝试在一个数据结构(如数组)中列出所有可接受的选项,然后在数组中循环。
-
最后,当创建一个不需要返回任何内容的函数时,您可以使用类型void而不是char。所以它可以是void gettingName(),而不是char gettingName。
作为一个示例,为了向您展示一种快速简便的方法来完成我认为您想要的操作,我稍微简化了您的代码。我还决定使用std::string而不是char数组,因为它们更容易使用:
class Student{
public:
std::string name;
};
std::string gettingName();
int main()
{
Student Info;
Info.name = gettingName();
cout << "Hi my name is: " << Info.name << endl;
return 0;
}
std::string gettingName()
{
std::string name;
cout << "What is your name? ";
cin >> name;
cout << endl;
return name;
}
您的代码实际上并不是面向对象的。要修复作用域,您必须将gettingName
放入类中,使其成为成员函数(顺便说一下,这是Google的术语)。您还必须更改实现,然后需要包括用于标识的类名:
char Student::gettingName()
{
...
}
从main
,你可以通过呼叫它
info.gettingName();
相关文章:
- "变量":函数中函数作用域不允许初始化的自动或寄存器变量'naked'
- 当变量在多个函数作用域中使用时,我应该在类 private 中声明该变量吗?
- 缩短成员函数作用域说明符(嵌套类)(C++)
- 函数作用域是静态变量还是线程本地变量在C++11中的第一个条目中初始化
- 如何声明在函数作用域中定义的结构
- 我可以在函数作用域中使用定义指令吗?
- 为什么函数作用域不允许类前向声明?
- C++函数作用域中声明的返回引用
- 关于 C++(或 C)中的指针的函数作用域
- 如何在与 c++ 中定义的函数作用域相同的文件中限制函数作用域
- 函数作用域的静态非 Pod 对象初始化
- C++函数作用域
- 正在获取另一个函数作用域中的参数值
- 对临时对象的常量引用在函数作用域(生存期)后被破坏
- 被视为依赖作用域的函数模板的函数作用域结构体的静态成员函数
- 局部作用域和函数作用域的区别
- 函数作用域中的指针崩溃
- 将指针传递给函数只会改变函数作用域中的值
- 友元函数作用域和声明点
- using声明不能在函数作用域中重复.为什么