我想为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;
}