我想让用户输入一个代表难度的数字但是当我使用if
语句检查难度是否为1时,if
内的代码块永远不会被执行输入1
。
与问题的答案相同。
例如,当我运行代码并且它要求我输入难度并输入2或1000时,它仍继续执行代码。即使我输入1945年第一个错误的问题,它只会显示you got it correct
的答案。
非常感谢任何帮助!
代码:
int difficulty;
cout << "Please choose a difficulty: 1 for easy 2 for medium 3 for hard: ";
cin >> difficulty;
if (difficulty = '1')
{
ifstream file_("questions.txt");
if (file_.is_open())
{
std::getline(file_, ques1);
cout << ques1 << std::endl;
int answr1;
cout << "Enter 1 for: 1945, Enter 2 for: 1914 \n";
cin >> answr1;
if (answr1 = '1914')
{
cout << "Well done you got it correct! \n";
}
else {
cout << "Incorrect answer was 1914! \n";
}
std::getline(file_, ques2);
cout << ques2 << std::endl;
int answr2;
cout << "Enter 1 for: 1937, Enter 2 for: 1939 \n";
cin >> answr2;
if (answr2 = '1939')
{
cout << "Well done you got it correct! \n";
}
else {
cout << "The answer was 1939 \n";
}
std::getline(file_, ques3);
cout << ques3 << std::endl;
int answr3;
cout << "Enter 1 for: George Bush, Enter 2 for: George Washington \n";
cin >> answr3;
if (answr3 = '2')
{
cout << "Well done you got it correct! \n";
}
else {
cout << "It was George Washington \n";
}
std::getline(file_, ques4);
cout << ques4 << std::endl;
int answr4;
cout << "Enter 1 for: 14, Enter 2 for: 11 \n";
cin >> answr4;
if (answr3 = '11')
{
cout << "Well done you got it correct! \n";
}
else {
cout << "It was 11 \n";
}
std::getline(file_, ques5);
cout << ques5 << std::endl;
int answr5;
cout << "Enter 1 for: She was born with 6 figners , Enter 2 for: 6 toes \n";
cin >> answr5;
if (answr3 =' 2')
{
cout << "Well done you got it correct! \n";
}
else {
cout << "It was 6 Toes \n";
}
file_.close();
}
else {
cout << "File is not open\n";
}
}
答案 0 :(得分:0)
你的if语句在你的逻辑上是有缺陷的。你希望用户在两个选项之间进行选择,所以如果他们选择1或2以外的任何东西给他们提示并期待这两个答案中的一个。参见下面的例子:
if (answr1 == "1914")
{
cout << "Well done you got it correct! \n";
}
else if(answr1 == '1945') {
cout << "Incorrect answer was 1914! \n";
}
else {
cout << "Incorrect Input!Plese input 1 or 2 \n";
}
P.S:在C ++中=
运算符用于赋值。使用==
进行比较
答案 1 :(得分:0)
要进行相等比较,请使用:==
:
if(difficulty==1)
{
cout << "You selected difficulty 1" << std::endl;
}
如果你这样做
if(difficulty=1)
{
cout << "You selected difficulty 1" << std::endl;
}
1分配给难度。检查if
条件(在这种情况下检查变量不为0),因此始终满足。
答案 2 :(得分:0)
首先(建议!),您正在处理用户输入。您应该始终考虑用户输入不正确的可能性!
int n;
std::cin >> n;
如果用户键入e。 G。 &#39; x&#39;,流进入无效状态,您再也无法成功阅读其他任何内容。因此,在每次输入后,您应该检查流:
if(!std::cin)
{
// print some error message?
// reset the error state!
std::cin::clear();
// skip whatever yet is buffered in the stream
std::cin.ignore(std::numeric_limits<std::streamsize>::max())
// now std::cin is ready to use again...
}
你可以在循环中执行此操作,对输入进行进一步检查,只有在有效时才退出...尝试创建函数以避免代码重复。
int difficulty;
std::cin >> difficulty;
if (difficulty = '1') // << !!!
一次出现两个错误:单个等号不是比较,而是作业!所以你要分配角色的值&#39; 1&#39; (在数字上不是1!)变量difficulty
- 然后检查此赋值的结果。由于变量现在得到的值不是0(零),因此将输入if块 - 始终。为了比较,您需要使用:
if(difficulty == '1')
// ^^
好的,仍然是值:'1'
是一个字符文字,而不是数字文字。最有可能的是,您在前128个字符上使用的字符集与ASCII兼容,如果是,'1'
对应于49的数值。很确定这不是你想要的......所以:
if(difficulty == 1)
// ^ integer literal, numerical value!
或者,您可以阅读一个字符:
char difficulty; // different type!
std::cin >> difficulty;
if (difficulty = '1')
现在读取一个简单的字符而不进行任何转换,而读入int会将一个或更多(!)字符转换为数值。如果没有转换,字符输入保持不变,您可以与字符值进行比较......
int answr1;
cin >> answr1;
if (answr1 = '1914')
同样如此,但是,现在,您使用的是无效的字符文字!
您可以与字符串进行比较,如果有的话:
std::string answr1;
cin >> answr1;
if (answr1 == "1914")
或再次作为整数,如上所述(if(a == 1914)
)。另一方面,虽然:
std::cout << "Enter 1 for: 1945, Enter 2 for: 1914 \n";
以上比较要求用户不要输入2
以获得正确答案,而是1914
!因此,您宁愿与选项进行比较:
if(answr1 == 2)
最后,还有一些建议:您将文本文件中的问题与代码中的静态链接响应选项相结合。那么,你的文本文件是徒劳的......
您也可以尝试从文件中拖出答案。进一步的优势:您可以通过使用循环来避免重复代码,并且可以针对不同文件中的不同困难组织您的问题。您的代码可能看起来与此代码类似:
std::ifstream file;
std::cin >> difficulty;
switch(difficulty)
{
case 1:
file.open("question_1.txt");
break;
case 2:
case 3:
// ...
break;
default:
// invalid input! -> appropriate handling
break;
}
std::string text;
for(;;)
{
std::getline(file, text);
// the question text:
std::cout << text << std::endl;
// the answer options:
std::getline(file, text);
std::cout << text << std::endl;
// read the correct answer:
std::getline(file, text);
int answer; // parse appropriately from text!
// read the text for output, if users answer was not correct!
std::getline(file, text);
// now read in user input and compare against correct answer...
}
文件格式现在非常明显:对于每个问题四行,内容如上所述。您可能会发明更复杂的东西甚至使用XML,但就目前而言,它应该足够......
好吧,你仍然需要正确地确定文件的结尾并且如果到达则退出循环,将此作为练习给你...