我已经使这段代码在终端中产生了一个下雨矩阵效果:
#include <stdio.h>
#include <stdlib.h>
int main(){
char characters [83] = {'A', ' ', 'B', 'C', ' ', 'D', 'E', ' ', 'F', 'G', ' ', 'H', 'I', ' ', 'J', 'K', 'L', ' ', 'M', 'N', 'O', ' ', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', ' ', 'W', 'X', 'Y', 'Z', 'a', ' ', 'b', 'c', 'd', 'e', 'f', 'g', 'h', ' ', 'i', 'j', 'k', 'l', 'm', ' ', 'n', 'o', 'p', 'q', 'r', ' ', 's', 't', 'u', ' ', 'v', 'w', 'x', 'y', 'z', '0', '1', '2', '3', '4', '5', '6', '7', '8', ' ', '9', '!', '%', '&', ' ', '?', '#', '*'};
int i = 0;
int index_array;
srand(time(0));
struct timespec tim, tim2;
tim.tv_sec = 0;
tim.tv_nsec = 10000000L;
for (i=0; i < 20; i++){
index_array = (rand()%83)+1;
printf("%c", characters[index_array]);
nanosleep(&tim, &tim2);
}
printf("\n");
main();
}
但我遇到了问题:
1。)代码一次打印20个字符并等待nanosleep()
而不是每个字符单一和等待nanosleep()
,然后再打印下一个字符...
希望你能帮助我,问题不是那么愚蠢......谢谢。
答案 0 :(得分:1)
您一次看到20个字符的原因是程序(或在引擎盖下运行的C运行时)缓冲标准输出流。只有当它获得换行符或其缓冲区已满时,它才会将缓冲区内容传递给流。这就是我们所说的缓冲区刷新。您可以使用库函数来强制刷新:fflush()
。所以这就是你需要在printf语句后面做的事情:fflush(stdout);
我在你的代码中看到的下一个问题是你计算一个介于1和83之间的随机索引。但你的数组只能容纳83个字符,这意味着正确的索引应该在0到82之间。
最后但并非最不重要的是,你是第一个我看到以递归方式调用main()来模仿无尽的loooop。这不是一个好习惯,因为你的程序很快就会开始膨胀,最后破坏整个内存,导致计算机崩溃......等等。你不是故意的,是吗? ;)但是,请使用循环(当然不是崩溃。)