我尝试了不仅仅猜测随机数。条件是这些:
使用从1到100的数字,如果插入的数字不在此范围内,则显示重新输入数字的行
使用input()
显示输出(但显示最后一行`在main()上显示“ N次尝试正确!”
使插入的号码继续显示在下一行。
基本上,该程序应显示为这样:
output()
我已经研究了6个小时了...(因为我是一个初学者)...而且值得庆幸的是,我已经能够设法获得基本结构,因此该程序至少可以能够显示该数字是否大于插入的数字,小于小于插入的数字。
问题是,我无法获得要在线显示的数字。例如,我无法在insert a number : 70
bigger than 0 smaller than 70.
insert a number : 35
bigger than 35 smaller than 70.
insert a number : 55
bigger than 55 smaller than 70.
insert a number : 60
bigger than 55 smaller than 60.
insert a number : 57
You got it right on your 5th try!
上继续显示插入的数字70
。
而且,我无法找出如何获得尝试次数。我首先尝试将其作为smaller than 70
放在input()中,但是在输出中失败了。然后,我尝试放入output(),但输出不会返回count = 0 ... count++;
,因此再次失败。
我希望就此问题寻求建议。
以下是我编写的代码,没有错误,但是存在一些问题,因为它与最终结果的条件不匹配。(顺便说一句,我当前正在使用Visual Studio 2017,这就是为什么有一行count
和#pragma warning (disable : 4996)
而不是myflush
的原因。)
fflush
我无法找出如何获得尝试的次数。
将#include <stdlib.h>
#include <time.h>
#include <stdio.h>
#pragma warning (disable : 4996)
int input();
int random(int);
void myflush();
void output(int, int);
int main()
{
int num;
int i;
int ran;
srand((unsigned int)time(NULL));
i = 0;
while (i < 1) {
ran = 1 + random(101);
++i;
}
num = input();
output(ran, num);
printf("You got it right on your th try!");a
return 0;
}
int input()
{
int num;
printf("insert a number : ");
scanf("%d", &num);
while (num < 1 || num > 100 || getchar() != '\n') {
myflush();
printf("insert a number : ");
scanf("%d", &num);
}
return num;
}
int random(int n)
{
int res;
res = rand() % n;
return res;
}
void myflush()
{
while (getchar() != '\n') {
;
}
return;
}
void output(int ran, int num) {
while (1) {
if (num != ran){
if (num < ran) {
printf("bigger than %d \n", num); //
}
else if (num > ran) {
printf("smaller than %d.\n", num);
}
printf("insert a number : ");
scanf("%d", &num);
}
else {
break;
}
}
return;
}
功能从output
更改为void
,以便它可以返回计数值,并为其他更改添加注释注释:
int
然后输入int output(int ran, int num) {//changed from void to int
int count = 0;//create a variable to track tries
while (1) {
if (num != ran){
count++;//increment tries here and...
if (num < ran) {
printf("bigger than %d \n", num); //
}
else if (num > ran) {
printf("smaller than %d.\n", num);
}
printf("insert a number : ");
scanf("%d", &num);
}
else {
count++;//... here
break;
}
}
return count;//return value for accumulated tries
}
:
main
经过这些修改,您的代码按上述方式运行。(但是,对于第一次,第二次或第三次尝试,//declare count
int count = 0;
...
count = output(ran, num);
printf("You got it right on your %dth try!", count);
的工作效果并不理想)
如果您希望程序始终显示低于随机数(“大于”)的最高输入数字,而高于随机数(“小于”)的最低输入数字,则您的程序必须记住这两个数字,以便可以根据需要进行更新和打印。
在函数th
中,您可以声明以下两个整数:
main
这些变量必须进入函数int bigger_than, smaller_than;
,因为在程序的整个过程中都必须记住这些数字。函数main
是唯一在整个程序中运行的函数,所有其他函数仅在短时间内运行。一种替代方法是将这两个变量声明为全局变量。但是,这被认为是不好的编程风格。
您可以将这两个变量初始化为值-1,以将其标记为无效(因为用户尚未输入任何数字)。当用户输入新数字时,当然必须更新这些变量。
每次调用时,这两个int必须传递给函数main
,该函数的参数数量从2增加到4。
[如果您希望计数器对输入的数字进行计数,则还必须记住该值在函数main中(或作为全局变量)并将其传递给函数output
。这会将函数的参数数量增加到5。
如果不想传递太多参数来输出,则可以将函数output
和output
的内容合并到函数input
中。但是,我建议您先尝试解决该问题,而不要这样做。
[但是,无论哪种方式,您都必须将大多数“小于”和“大于”逻辑从函数main
移至函数output
,因为更改新的“ bigger_than”需要该逻辑以及属于函数main的int变量“ smaller_than”。函数main
应该只包含实际的打印逻辑。
尽管从技术上可以从函数output
内更改属于函数main
的这两个变量,但我不建议这样做,因为那样会很麻烦。这将需要您将几个指针传递给函数output
,这将允许该函数更改属于函数output
的变量。]>
此代码中有很多问题,可能还会简化。