我最近已经开始使用C,并且无法让计算机想到一个随机数。 到目前为止这是代码。我需要帮助!
#include <stdio.h>
#include <stdlib.h>
int main ()
{
time_t t;
int userin;
printf("Guess a number from 1 to 10\n");
scanf("%d", userin);
int r = rand() % 11;
if (r == userin)
{
printf ("you are right");
}
else
{
printf("Try again");
}
return 0;
}
很多人解决了!!!!
答案 0 :(得分:5)
在您的代码中,r
将是0到10之间的随机数。对于1到10之间的随机数,请执行以下操作:
int r = rand() % 10 + 1;
另外,你应该打电话给
srand(time(NULL));
在main
的开头,为随机数生成器播种。如果你没有为发生器播种,它总是生成相同的序列。
答案 1 :(得分:2)
您的scanf
声明中也存在问题。
你应该使用
scanf("%d", &userin);
而不是
scanf("%d", userin); /* wrong - you need to use &userin */
scanf
需要存储值的变量地址。对于变量,这是通过使用&
来预先变量来给出的,如&userin
中所示。
答案 2 :(得分:2)
您的代码中存在一些问题。
&
scanf
rand()%11
的结果也可以是0
rand()
函数的种子,因此它始终返回相同的结果。使用printf
调试代码,如下例所示,根据您的代码可以提供很多帮助:
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#define DEBG 1
int main (void)
{
time_t t;
int userin;
printf("Guess a number from 1 to 10\n");
if(scanf("%d", &userin) != 1){ // read into the variable's address
printf("Conversion failure or EOF\n");
return 1;
}
if(userin < 1 || userin > 10){ // check against "illegal" input
printf("Offscale, try again\n");
return 1;
}
srand(time(NULL)); // initialize the seed value
int r = 1 + rand() % 10; // revise the formula
if (DEBG) printf("%d\t%d\t", r, userin); //debug print
if (r==userin){
printf ("you are right\n");
}else{
printf("Try again\n");
}
return 0;
}
请同时咨询this SO post。
答案 3 :(得分:0)
问题:
scanf("%d", userin); //you are sending variable
variable
的地址作为参数发送到scanf()
而不是variable
所以改为将其改为:
scanf("%d", &userin); //ypu need to send the address instead
和rand()%11
会产生0
到10
但不会从1
到10
的任何数字
正如其他答案所示,请使用:
(rand()%10)+1 //to produce number from 1 to 10
解决方案:
还包括使用time.h
srand(time(NULL));
功能
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main(void)
{
srand(time(NULL));
int userin;
printf("Guess a number from 1 to 10\n");
scanf("%d", &userin);
int r = (rand() % 10)+1;
if (r==userin)
{
printf ("you are right");
}
else
{
printf("Try again");
}
return 0;
}
为什么要使用
srand(time(NULL))
?
rand()
根本不是随机的,它只是一个产生一系列表面随机数并在一段时间内重复的数字的函数。唯一可以更改的是种子,它会改变序列中的起始位置。
和,
srand(time(NULL))
就是出于这个原因而使用
答案 4 :(得分:0)
这应该有效
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
int main ()
{
int userIn = 0; //I like to initialize
printf("Guess a number from 1 to 10\n");
scanf("%d", &userIn);
srand(time(NULL)); //seed your randum number with # of seconds since the Linux Epoch
int r = (rand()%10)+1; //rand%11 gives values 0-10 not 1-10. rand%10 gives 0-9, +1 makes sure it's 1-10
if (r == userIn)
{
printf ("you are right\n");
}
else
{
printf("Try again\n");
}
return 0;
}
编辑:您可能希望实现代码以验证用户输入实际上是整数。