如何解决C ++添加数组
我是C ++的新手,目前已参加入门课程。我正在创建的程序是编程教程(具有讽刺意味的!),当前正在尝试添加菜单选项,该菜单选项会将用户带到测验中。没有什么花哨。截至目前,似乎我的函数无法识别我创建的类。到目前为止,这就是我的建议,我们将不胜感激任何精打细算的建议!
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
int main()
{
string username = "";
int choice;
char c;
char answer;
int x = 4;
int y = 5;
int z = x + y;
int ans;
int total;
class Question
{
private:
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
public:
void setValues(string,string,int,int);
void askQuestion ( );
};
//welcome message
cout << "Hello user,please enter your name:";
cin >> username;
cout << "Welcome to the programming tutorial " << username << "."<< endl;
//menu selection
while(toupper (choice != 'E'))
{
cout << "What would you like to do? (Unit 1 - Declaring Variables (1),Unit 2 - Input/ Output (2),Unit 3 - Conditionals (3),Quizzes (4) or Exit (E))";
cin >> choice;
if (choice == '1')
{
cout << "We will begin with defining variables. The first step to doing this is choosing which datatype your variable is.\n";
cout << "The following are a few of the common datatypes used in programming.\n";
cout << "Character ==> char\n";
cout << "Integer ==> int,long,double\n";
cout << "Boolean ==> bool\n";
cout << endl;
cout << "When declaring a variable,you must put its datatype before the variable name.\n";
cout << "An example of this would be if we wanted to declare the value of x as 4.\n";
cout << "We would write this as: \n";
cout << "int x = 4\n";
cout << "The program will now use the value 4 for the variable name 'x'\n";
cout << endl;
cout << "Now let's assume we assigned the value of 5 to the variable 'y'\n";
cout << "If we wanted to add x and y and assign the sum to the variable 'z',we would write:\n";
cout << "int z = x + y\n";
cout << "Now when we use the variable 'z' in our program,it will perform the calculation given x=4 and y=5 and declare 9 as the value of the variable 'z'.\n";
cout << "To test our code,we would write: " << endl;
cout << "cout<<'x + y'<< z << endl; \n";
cout << "If written correctly,it will display as: \n";
cout << "x + y = " << z << "." << endl;
}
if (choice == '2')
{
cout << "Now that we understand the basics of declaring variables,let's discuss displaying,or output of,information to a user.\n";
cout << "If you wanted to display a welcome message,for example,you would type:\n";
cout << "cout << 'Welcome';\n";
cout << "The line of code would start with 'cout' followed by two less than signs and then the message you wish to display in quotes.\n";
cout << "Using this,you can ask the user for input.\n";
cout << "Enter c to continue...";
cin >> c;
cout << "Let's say we have a program that flips a coin. You may want to ask the user how many times to flip the coin.\n";
cout << "Assuming we previously declared this amount variable as 'int timesFlipped',we would 'cout' our question and the next line would read:\n";
cout << "cin>> timesFlipped; \n";
cout << "This will store the users input for the variable 'timesFlipped'\n";
cout << "You almost always end a line of code with a semi colon."<<endl;
}
if (choice == '3')
{
cout << "This unit will cover conditional expressions."<<endl;
}
if (choice == '4')
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
Question q1;
Question q2;
Question q3;
cout <<username << ",you have chosen to take a quiz." << endl << endl;
int ans,score = 0;
cout << "Unit One Quiz - Variables " << endl << endl;
q1.setValues("How would you declare the value of 'x' as 12? ","x=12()","x==12()","x=12;()",3,1);
q2.setValues("What do you need to put before a variable when declaring it?","a name()","a value()","a datatype()",1);
q3.setValues("Which data type would you use for a number that includes a decimal value?","int()","double()","float()",2,1);
q1.askQuestion();
q2.askQuestion();
q3.askQuestion();
cout << "Your score out of a possible 3 is " << total << endl;
}
if (choice == 'E')
{
cout << "Have a good day!";
break;
}
}
system("pause");
}
void Question :: setValues(string q,string a1,string a2,string a3,int ca,int pa)
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
Question_Text = q;
Answer_one = a1;
Answer_two = a2;
Answer_three = a3;
Correct_Answer = ca;
Question_Score = pa;
}
void Question :: askQuestion()
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
int ans;
int Total;
cout << endl;
cout << Question_Text << endl;
cout << "1. " << Answer_one << endl;
cout << "2. " << Answer_two << endl;
cout << "3. " << Answer_three << endl << endl;
cout << "Please enter your answer: " << endl;
cin >> ans;
if (ans == Correct_Answer)
{
cout << "That is correct!" << endl;
Total = Total + Question_Score;
}
else
{
cout << "Sorry,that is incorrect" << endl;
cout << "The correct answer was " << Correct_Answer << endl;
}
}
我在这两个函数中都声明了变量,因为直到我这样做时才在每个函数中都识别出它们,但是现在我在想这是因为无法识别该类。 >
解决方法
针对您遇到的问题,您的程序可以简化为以下内容:
int main()
{
class Question {
public:
void askQuestion();
};
Question q;
q.askQuestion();
}
void Question::askQuestion() { }
在Question::askQuestion()
的定义中会出现错误,因为该类是在main()
函数的范围内声明(并定义)的-在它的外部无法识别。
将班级移到main()
之外,就像这样:
class Question {
public:
void askQuestion();
};
int main()
{
// you can use the Question class here,even though you haven't
// defined all of its methods yet!
Question q;
q.askQuestion();
}
void Question::askQuestion() { }
...,并且此程序执行compile(godbolt.org)。
这还不是全部,但是...您要在每个成员函数中声明成员变量(例如Question_text
)。本地定义掩盖了类成员,因此您只需设置方法的本地变量,该变量在执行完成时会被破坏。
其他注意事项和建议:
- 如果类已经有了方法名称,则无需在方法名称中再次使用单词
Question
。即Question::ask()
比Question::askQuestion()
似乎是更好的名称选择。Question::Question_text
也是如此。 - 最好使用avoid using namespace std,并且仅使用您专门打算引用的
std::
中的类,类型或函数。 - 如果考虑一下,对
Question
类的使用是相当人为的。它的代码主要是用于进行测验的代码,而不是诸如此类的问题。似乎最好选择“对象”是一组答案和值或问题参数。可以通过构造QuestionParameters
对象来设置值,并提出问题可能是采用此类对象的函数。 - 如果您有
Answer_one
,Answer_two
,Answer_three
-那么您可能需要一个容器,例如std::vector<std::string> answers
。然后,您可以使用答案索引而不是使用if
或switch
语句。
在主函数之外定义类时必须进行的更改 使用开关代替if 使用int值而不是E退出程序。 我对代码进行了如下更改
#include <iostream>
#include <iomanip>
#include <string>
using namespace std;
class Question
{
private:
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
public:
void setValues(string,string,int,int);
void askQuestion();
}; //end of class
//---------------------------
void Question ::askQuestion()
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
int ans;
int Total;
cout << endl;
cout << Question_Text << endl;
cout << "1. " << Answer_one << endl;
cout << "2. " << Answer_two << endl;
cout << "3. " << Answer_three << endl
<< endl;
cout << "Please enter your answer: " << endl;
cin >> ans;
if (ans == Correct_Answer)
{
cout << "That is correct!" << endl;
Total = Total + Question_Score;
}
else
{
cout << "Sorry,that is incorrect" << endl;
cout << "The correct answer was " << Correct_Answer << endl;
}
} //end of askQuestion
//----------------------------------
void Question ::setValues(string q,string a1,string a2,string a3,int ca,int pa)
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
Question_Text = q;
Answer_one = a1;
Answer_two = a2;
Answer_three = a3;
Correct_Answer = ca;
Question_Score = pa;
} //end of setValues
//----------------------------------
int main()
{
string username = "";
int choice;
char c;
char answer;
int x = 4;
int y = 5;
int z = x + y;
int ans;
int total;
//welcome message
cout << "Hello user,please enter your name:";
cin >> username;
cout << "Welcome to the programming tutorial " << username << "." << endl;
//menu selection
while (choice != 5)
{
cout << "What would you like to do? (Unit 1 - Declaring Variables (1),Unit 2 - Input/ Output (2),Unit 3 - Conditionals (3),Quizzes (4) or Exit (5))";
cin >> choice;
switch (choice)
{
case 1:
{
cout << "We will begin with defining variables. The first step to doing this is choosing which datatype your variable is.\n";
cout << "The following are a few of the common datatypes used in programming.\n";
cout << "Character ==> char\n";
cout << "Integer ==> int,long,double\n";
cout << "Boolean ==> bool\n";
cout << endl;
cout << "When declaring a variable,you must put its datatype before the variable name.\n";
cout << "An example of this would be if we wanted to declare the value of x as 4.\n";
cout << "We would write this as: \n";
cout << "int x = 4\n";
cout << "The program will now use the value 4 for the variable name 'x'\n";
cout << endl;
cout << "Now let's assume we assigned the value of 5 to the variable 'y'\n";
cout << "If we wanted to add x and y and assign the sum to the variable 'z',we would write:\n";
cout << "int z = x + y\n";
cout << "Now when we use the variable 'z' in our program,it will perform the calculation given x=4 and y=5 and declare 9 as the value of the variable 'z'.\n";
cout << "To test our code,we would write: " << endl;
cout << "cout<<'x + y'<< z << endl; \n";
cout << "If written correctly,it will display as: \n";
cout << "x + y = " << z << "." << endl;
break;
}
case 2:
{
cout << "Now that we understand the basics of declaring variables,let's discuss displaying,or output of,information to a user.\n";
cout << "If you wanted to display a welcome message,for example,you would type:\n";
cout << "cout << 'Welcome';\n";
cout << "The line of code would start with 'cout' followed by two less than signs and then the message you wish to display in quotes.\n";
cout << "Using this,you can ask the user for input.\n";
cout << "Enter c to continue...";
cin >> c;
cout << "Let's say we have a program that flips a coin. You may want to ask the user how many times to flip the coin.\n";
cout << "Assuming we previously declared this amount variable as 'int timesFlipped',we would 'cout' our question and the next line would read:\n";
cout << "cin>> timesFlipped; \n";
cout << "This will store the users input for the variable 'timesFlipped'\n";
cout << "You almost always end a line of code with a semi colon." << endl;
break;
}
case 3:
cout << "This unit will cover conditional expressions." << endl;
break;
case 4:
{
string Question_Text;
string Answer_one;
string Answer_two;
string Answer_three;
int Correct_Answer;
int Question_Score;
Question q1;
Question q2;
Question q3;
cout << username << ",you have chosen to take a quiz." << endl
<< endl;
int ans,score = 0;
cout << "Unit One Quiz - Variables " << endl
<< endl;
q1.setValues("How would you declare the value of 'x' as 12? ","x=12()","x==12()","x=12;()",3,1);
q2.setValues("What do you need to put before a variable when declaring it?","a name()","a value()","a datatype()",1);
q3.setValues("Which data type would you use for a number that includes a decimal value?","int()","double()","float()",2,1);
q1.askQuestion();
q2.askQuestion();
q3.askQuestion();
cout << "Your score out of a possible 3 is " << total << endl;
break;
}
case 5:
cout << "Have a good day!";
break;
} //end of switch
} //end of while
system("pause");
return 0;
} //end of main
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。