srand(time(NULL)); int k; while (1)//循环显示 { int name = rand() %(s-1); // 随机生成一个索引 // 界面上轮流显示文件中的名字r printf("%s\r", stu_name[name]); //printf("\r"); fflush(stdout); // 刷新输出缓冲区 usleep(300000); //printf("\r"); // 光标回到首行 if (k==24) { break; } int len =strlen(stu_name[name]);//字符修正 for (int i = 0; i < len; i++) { printf("\b \b"); } k++; }优化代码
时间: 2024-04-16 08:26:21 浏览: 22
以下是对给定代码进行优化的一些建议:
1. 将`srand(time(NULL));`移动到循环外部,只需要在程序启动时调用一次即可。
2. 使用`size_t`类型来保存变量`s`(假设`s`是一个表示`stu_name`数组长度的变量),并确保`s`的值大于等于1,以避免除以零的错误。
3. 将`rand() % (s-1)`修改为`rand() % s`,以确保生成的索引在合法范围内。
4. 将`fflush(stdout);`移动到`printf`语句之后,以便立即刷新输出缓冲区。
5. 考虑使用更精确的延迟函数,例如`usleep()`可能不是最准确的方法。可以考虑使用`nanosleep()`函数来进行更精确的延迟。
6. 使用`\033[A`转义序列代替`\r`来将光标移动到上一行的开头。
7. 如果只需要循环24次,可以将`while(1)`修改为`while(k < 24)`,并在每次循环结束后递增`k`的值。
优化后的代码如下:
```c
srand(time(NULL));
size_t k = 0;
while (k < 24)
{
size_t name = rand() % s;
printf("\033[A%s\n", stu_name[name]);
fflush(stdout);
usleep(300000);
int len = strlen(stu_name[name]);
for (int i = 0; i < len; i++)
{
printf("\b \b");
}
k++;
}
```
请注意,这只是一些优化的建议,具体最佳实践可能会因您的需求和环境而有所不同。