char generateRandom(void)
{
time_t t;
srand((unsigned) time(%t));
char choice = (char) rand() % 5 + 65;
return choice;
}
我正在尝试使用rand()函数从A到G随机生成字符,添加65以使数字范围为65到71,并将其转换为char值。
当我尝试运行时,我收到一条错误,说“在令牌之前预期表达”。
我不太确定我的代码行在语法方面做错了什么。
答案 0 :(得分:7)
srand((unsigned) time(%t));
// ^
应该是:
srand((unsigned) time(&t));
// ^
%
运算符是二进制运算符(a % b
),它尝试查找模数(将a
除以b
时的余数)。 &
运算符是一元运算符(&a
),它为您提供指向a
对象的指针。您需要在这里使用后者(但请参见下文,因为您不实际上需要使用它)。
你还有其他一些问题,其中包括:
您应该将随机数生成器播种一次(可能在main()
中),而不是每次都需要一个随机数。
您可以使用srand (time (0))
播种,因为传递NULL意味着您不想存储时间。在这种情况下,无需为t
变量创建。
表达式number % 5
会为您提供从0
到4
的值。这只会通过A
传递E
。您应该使用7
。
如果您添加'A'
而不是幻数65
,您的代码将更具可读性。
没有需要将结果投射到某个角色,无论如何,您只会将rand()
的结果投射到您拥有的代码(与%
一起使用,可能会在默认情况下签署char
的环境中产生负数)。如果你想要将整个表达式包括在括号中,你应该将它包括在内,但是我建议你完全删除它。
另外,对于完整的可移植性,你甚至不应该假设这些字母是连续的,因为标准只能保证0-9
而不是其它。
如果您担心类型的问题,那么您最好使用以下内容:
char genRandom (void) {
return "ABCDEFG"[rand() % 7]; // assume srand already called.
}
答案 1 :(得分:1)
更改这两行
srand((unsigned) time(%t));
char choice = (char) rand() % 7 + 65; //It will not give the characters from A to G
到
srand((unsigned) time(&t));
char choice = (char) (rand() % 7 + 65); // or remove the cast
答案 2 :(得分:0)
尝试使用此代码,它适用于gcc:
#include <stdio.h>
#include <string.h>
#include <time.h>
main()
{
srand(time(NULL));
char rc=(char)(rand()%7)+65;
printf("%c",rc);
}