【发布时间】:2020-06-29 04:44:45
【问题描述】:
对于我的作业,我需要编写一个程序,在 5 次尝试内猜出用户的号码,包括 1 到 19 之间。对于每次尝试,用户输入的数字是:a) 正确、b) 太高或 c) 太低
我们应该定义两个函数:
-
1234563输入正确、高或低。
第二个函数应该在被告知是过高还是过低后计算下一个猜测。
我能够使用嵌套的 switch 语句来完成此操作,但我在尝试提出第二个函数时遇到了麻烦。
感谢任何帮助。我将尝试用switch 语句附加我的第一个程序。我假设我需要生成一个带有最小值和最大值的随机数,但我不知道该怎么做。
#include<iostream>
using namespace std;
int main()
{
int guess = 10;
int input = 0;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch(input) {
case(1):
cout<< "Thanks for playing";
break;
case(2):
guess = 5;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch(input){
case(1):
cout<< "Thanks for playing";
break;
case(2):
guess = 3;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case(1):
cout<< "Thanks for playing";
break;
case(2):
guess = 2;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch(input){
case(1):
cout<< "Thanks for playing";
break;
case (2):
guess = 1;
cout<< "Your guess was: "<<guess<<endl;
break;
case (3):
cout<< "Cheater..."<<endl;
break;
}
break;
case(3):
guess = 4;
cout<< "Your guess was: "<<guess<<endl;
break;
}
break;
case(3):
guess = 7;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case (1):
cout<< "Thanks for playing";
break;
case(2):
guess = 6;
cout<< "Your guess was: "<<guess<<endl;
break;
case(3):
guess = 8;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case (1):
cout<< "Thanks for playing";
break;
case(2):
cout<<"Cheater..."<<endl;
case(3):
guess = 9;
cout<< "Your guess was: "<< guess<<endl;
break;
}
}
break;
}
break;
case(3):
guess = 15;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch(input){
case(1):
cout<< "Thanks for playing";
break;
case(2):
guess = 13;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case(1):
cout<< "Thanks for playing";
break;
case(2):
guess = 12;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch(input){
case(1):
cout<< "Thanks for playing";
break;
case (2):
guess = 11;
cout<< "Your guess was: "<<guess<<endl;
break;
case (3):
cout<< "Cheater..."<<endl;
break;
}
break;
case(3):
guess = 14;
cout<< "Your guess was: "<<guess<<endl;
break;
}
break;
case(3):
guess = 17;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case (1):
cout<< "Thanks for playing";
break;
case(2):
guess = 16;
cout<< "Your guess was: "<<guess<<endl;
break;
case(3):
guess = 18;
cout<<"Is this your number: "<< guess<<endl;
cout<< "Correct? (1), High?(2), Low(3)"<<endl;
cin>> input;
switch (input){
case (1):
cout<< "Thanks for playing";
break;
case(2):
cout<<"Cheater..."<<endl;
case(3):
guess = 19;
cout<< "Your guess was: "<< guess<<endl;
break;
}
}
break;
}
break;
}
return 0;
}
【问题讨论】:
-
这种嵌套输入和 switch 语句的模式是糟糕的设计,应该从头开始。首先专注于编写函数,但只让您的程序调用每个函数一次(这是一次猜测,以及来自用户的一次输入)。完成该工作后,将其封装在一个循环中。
-
我们来玩个游戏吧。您必须猜测 1 到 19 之间的数字。我会告诉你它是否正确,太高或太低。你先猜哪个数字,为什么?
-
为什么你认为猜测是随机的?如果你自己玩,你会这样做吗?
-
正如约翰所指出的 - 设计不是最优的。它没有规模。假设明天的作业是 0 到 1000 之间的数字 - 你会怎么做?有图案吗?如何避免一遍又一遍地编写模式?
-
遵循作业的要求。编写两个函数,它们完全按照作业的要求执行,不多也不少。然后考虑如何将它们结合起来创建最终的算法。您正在尝试通过使用一堆 switch 语句对每个可能的特定情况进行硬编码来解决问题,而不是退后一步并思考如何编写适用于所有情况的通用算法。