为C中的结构元素生成随机名称

  • 本文关键字:随机 元素 结构 c
  • 更新时间 :
  • 英文 :


我想为book.author和book.title生成随机名称但当我打印时,什么都没有显示。

typedef struct Book{
char title[20];
char author[20];
int pages;
double price;
}Book;
int randInit(int min, int max){
return min + rand()%(max -min +1);
}
void rand_Init_Book(Book *b){
int len =randInit(10,20); 
for(int i =1 ; i < 1;i++)
{
b->title[i] = (char)randInit('a','z');   
}
len =randInit(10,20);
for(int i =1 ; i < randInit(10,20);i++)
{
b->author[i] = randInit('a','z');
}
b->pages = randInit(5,2000);
b->price = (100 + rand()%(10000-100))/100.;    
}

这些名称将不是实际的名称,只是一些字符串。当我退出循环并想要打印时,它表示字符串为空。我试过用strcpy加另一个字符串,但结果是一样的。

无迭代

CCD_ 1从不迭代,因为CCD_。

代码无法正确索引

数组的索引为零。

// for(int i =1 ; i < randInit(10,20);i++)
for(int i = 1; i < randInit(10,20); i++)

过长

char author[20];可以容纳一个字符串,最多19个字符+最后的空字符

// len =randInit(10,20);
len = randInit(10, 20 - 1);

无需重复查找随机长度

// for(int i =1 ; i < randInit(10,20);i++)
for(int i = 0; i < len;i++)

缺少空字符

字符串需要最后一个空字符


提示

  • 改进格式化-使用自动格式化程序。

  • 避免使用像10这样的裸幻数。

示例:

#define NAME_LENGTH_MIN 10
void rand_Init_Book(Book *b) {
int len = randInit(NAME_LENGTH_MIN, sizeof b->title - 1);
for (int i = 0; i < len; i++) {
b->title[i] = (char) randInit('a', 'z');
}
b->title[len] = '';
len = randInit(NAME_LENGTH_MIN, sizeof b->author - 1);
for (int i = 0; i < len; i++) {
b->author[i] = (char) randInit('a', 'z');
}
b->author[len] = '';
b->pages = randInit(5, 2000);
b->price = (100 + rand() % (10000 - 100)) / 100.0;
}

最新更新