我尝试使用两个for循环来生成一个范围在3到9个字符之间的随机单词序列,总共运行1000次。
内部for循环生成一个随机的单个字母,然后将这些字母组合在一起生成3-9个字符的单词。
到目前为止,我已经做到了:
#include <stdio.h>
#include <time.h>
int main()
{
int i, j;
int RandomNumber;
char letter[0];
char word[8];
char testword[4] = "test";
// generate random word
for (j = 3; j < 10; j++) {
RandomNumber = rand() % 26;
printf("%d", RandomNumber);
word[j] = 'a' + RandomNumber;
printf("Word: %s", word[j]);
}
return 0;
}发布于 2016-12-04 13:41:27
继续我的评论,您当前使用for (j = 3; j < 10; j++)的循环索引超出了word的界限。此外,您不知道word[0-2]中将包含什么内容,因为word未初始化,并且您从未使用任何内容填充索引0-2。此外,在C中,当您声明char word[8];时,只有8字符可以添加到索引0-7中的word。
如果您打算将数组用作字符串,则C要求字符串以nul结尾(例如,使用nul字节,即0或'\0' (它们等效)作为字符串的最后一个字符)。尝试将word作为字符串使用而不以nul结尾是未定义的行为(例如,在word上调用printf("Word: %s", word[j]);而不以nul结尾)
你不需要两个循环,你只需要在你要生成的每个单词的3-9之间有一个随机的长度。在进入循环为word生成字符之前,这可以是对rand()的单独调用。
要解决所有问题(请注意包含了用于rand()和srand()的stdlib.h ),您可以执行类似以下操作:
#include <stdio.h>
#include <stdlib.h> /* for rand()/srand() */
#include <time.h>
enum { MINW = 3, MAXW = 9 }; /* constants for min/max length */
int main (void)
{
int i, randlength;
char word[MAXW+1] = ""; /* initialize your variables */
i = randlength = 0;
srand (time (NULL)); /* initialize the random number generator */
randlength = rand() % (MAXW - MINW + 1) + MINW; /* randlength of 3-9 */
printf ("length : %d\n\n", randlength);
for (i = 0; i < randlength; i++) {
int randomnumber = rand() % 26,
randchar = 'a' + randomnumber;
printf(" number[%2d] : %2d '%c'\n", i, randomnumber, randchar);
word[i] = randchar;
}
word[i] = 0; /* nul-terminate (note: also done by initialization) */
printf ("\nWord : %s\n", word);
return 0;
}示例使用/输出
$ ./bin/randword
length : 3
number[ 0] : 8 'i'
number[ 1] : 20 'u'
number[ 2] : 0 'a'
Word : iua
$ ./bin/randword
length : 8
number[ 0] : 24 'y'
number[ 1] : 13 'n'
number[ 2] : 12 'm'
number[ 3] : 14 'o'
number[ 4] : 9 'j'
number[ 5] : 6 'g'
number[ 6] : 9 'j'
number[ 7] : 12 'm'
Word : ynmojgjm重要的是你要理解word[i] = 0;后面的注释“也是通过初始化完成的”。想一想为什么这种显式的nul终止可以在那里消除。如果你有任何问题,请告诉我。
https://stackoverflow.com/questions/40954807
复制相似问题