今天看到了一个LINUX下的有趣命令。
fortune命令。
当你执行此命令时,屏幕会随机显示一个格言。
然后,我花了一点时间用C语言做了一个大致的DEMO程序。
C语言程序:
#include<stdio.h>
#include<stdlib.h>
#include<time.h>
//读取文件某一行的格言
char * ReadSpeacialLine(int row,char filename[])
{
FILE *fp;
int WhichLine=row; //指定要读取哪一行
int CurrentIndex=0; //当前读取的行
char StrLine[1024]; //每行最大读取的字符数,可根据实际情况扩大
if((fp = fopen(filename,"r")) == NULL) //判断文件是否存在及可读
{
printf("error!");
return NULL;
}
while (!feof(fp))
{
if (CurrentIndex==WhichLine)
{
fgets(StrLine,1024,fp); //读取一行
printf("%s", StrLine); //输出
return StrLine;
}
fgets(StrLine,1024,fp); //读取一行,并定位到下一行
CurrentIndex++;
}
fclose(fp); //关闭文件
return NULL;
}
//计算文件的总行数(便于后面产生一定范围内的随机数)
int SumOfRows(char filename[])
{
FILE *fp;
int sum_rows=1,c;
fp=fopen(filename,"r");
if (fp!=NULL)
while ((c=fgetc(fp))!=EOF)
{
if(c=='\n')
sum_rows++;
}
fclose(fp);
return sum_rows;
}
//产生在文件总行数以内的随机数
int init_rand(char filename[])
{
int sum_rows=SumOfRows(filename);
int row;
int begin=0;
srand(time(NULL)); /*初始化随机数种子*/
row=rand()%(sum_rows-begin)+begin; /*生成一个[t,sum_rows)区间内的整数*/
return row;
}
int main()
{
char filename[] = "maxim.txt"; //文件名
int row=init_rand(filename);
ReadSpeacialLine(row,filename);
return 0;
}
我的格言集:
第一次:
第三次: