亲爱的 OP 请允许我直言不讳。那不是 C++,而是带有 iostreams 的 C 代码。也从未打印过第一个问题,发现了其他错误等。
这些都不是问题,如果你愿意学习。 Here 是标准 C++ 工作版本。请与您的代码进行比较并研究它。
// clang++ prog.cc -Wall -Wextra -std=c++17
#include <iostream>
#include <array>
#include <string_view>
using namespace std;
// required for sv literal
using namespace std::literals;
// compile time std array of string literals
// each transformed to string_veiw's
// by using the `sv` std defined literal
constexpr array questions {
"Question #1\n\nWhat is the formula for the area of a square?\n\nA.) Area = (Side)(Side)\nB.) Area = Side + Side\nC.) Area = Base + Height\nD.) Area = (pi)(Radius)(Radius)\nAnswer: "sv,
"Question #2\n\nWhat is the perimeter of a rectangle with length = 4 and width =8?\n\nA.) Perimeter = 4 + 8 = 12 units\nB.) Perimeter = (4)(8) = 32 units\nC.) Perimeter = 2(4) + 2(8) = 24 units\nD.) Perimeter = [2(4)][2(8)] = 128 units\nAnswer: "sv,
"Question #3\n\nWhat is the circumference of a Circle with Diameter = 10 units?\n\nA.) Circumference = (pi)(5)(5) = 78.5 units\nB.) Circumference = 2(pi)(5) = 31.41 units\nC.) Circumference = (pi)(10)(10) = 314 units\nD.) Circumference = 2(pi)(10) = 62.8 units\nAnswer:"sv,
"Question #4\n\nWhat is the measurement for the side of a square with Perimeter = 80?\n\nA.) 20 units\nB.) 80 units\nC.) 40 units\nD.) 50 units\nAnswer: "sv,
"Question #5\n\nWhat is the radius of a circle with area = 64pi square units?\n\nA.) 2pi units\nB.) 4pi units\nC.) 6pi units\nD.) 8pi units\nAnswer: "sv
};
// same compile time structure as questions
// but for answers
constexpr array answers {"A"sv,"C"sv,"B"sv,"A"sv,"D"sv};
int main()
{
char answer {};
int score{} ;
// answer counter starts from 0
size_t j = 0;
// standard C++ 'sequence' loop
for ( auto & question : questions ) {
cout << question;
cin >> answer;
if( answer == answers.at[j][0] ) score++;
j++ ;
}
cout <<"Your score is "<< score;
return 42 ;
}
有人甚至可能声称标准 C++ 很简单,看看这个。一个人只需要使用它。
附录
更好的设计是创建和操作单一结构,将答案和问题放在一起。一些横向思考总是有帮助的。
// clang++ prog.cc -Wall -Wextra -std=c++17
#include <iostream>
#include <array>
#include <string_view>
#include <utility> // std::pair
using namespace std;
using namespace std::literals;
constexpr std::array a_q_pairs {
pair{ 'A', "Question #1\n\nWhat is the formula for the area of a square?\n\nA.) Area = (Side)(Side)\nB.) Area = Side + Side\nC.) Area = Base + Height\nD.) Area = (pi)(Radius)(Radius)\nAnswer: "sv } ,
pair{ 'C', "Question #2\n\nWhat is the perimeter of a rectangle with length = 4 and width =8?\n\nA.) Perimeter = 4 + 8 = 12 units\nB.) Perimeter = (4)(8) = 32 units\nC.) Perimeter = 2(4) + 2(8) = 24 units\nD.) Perimeter = [2(4)][2(8)] = 128 units\nAnswer: "sv},
pair{ 'B', "Question #3\n\nWhat is the circumference of a Circle with Diameter = 10 units?\n\nA.) Circumference = (pi)(5)(5) = 78.5 units\nB.) Circumference = 2(pi)(5) = 31.41 units\nC.) Circumference = (pi)(10)(10) = 314 units\nD.) Circumference = 2(pi)(10) = 62.8 units\nAnswer:"sv},
pair{ 'A', "Question #4\n\nWhat is the measurement for the side of a square with Perimeter = 80?\n\nA.) 20 units\nB.) 80 units\nC.) 40 units\nD.) 50 units\nAnswer: "sv},
pair{ 'D', "Question 5\n\nWhat is the radius of a circle with area = 64pi square units?\n\nA.) 2pi units\nB.) 4pi units\nC.) 6pi units\nD.) 8pi units\nAnswer: "sv }
};
int main()
{
char user_answer {};
int score{} ;
// single loop
// requires no change on adding/removing answers/questions pairs
// no need to code index checking
for ( auto & a_and_q : a_q_pairs )
{
auto & answer = a_and_q.first ; // char
auto & question = a_and_q.second ; // string_view
cout << question ;
cin >> user_answer;
if( user_answer == answer ) score++;
}
cout <<"Your score is "<< score;
return 42 ;
}
精心设计的数据结构和对其进行操作的简单算法。也许我会把那个Niklaus Wirth book 擦掉?
必填WandBox is here。