猜数游戏
在生成随机数的时候如果我们没有设置随机数种子srand
,系统会自动将随机数种子设为1,那么每次打开程序生成的随机数总会是同一序列的(如下图),
要解决这个问题就需要我们设置随机数种子。
以系统时间作为随机数种子进行随机猜数游戏
//猜数字游戏输入多少次
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
#define MAX_STAGE 10 //最多可以输入的次数
int main()
{
int i;//已经输入的次数
int ans=-1; //猜的值
int no; //目标数字
int num[MAX_STAGE];//猜值的历史记录
int retry; //是否再玩异常
printf("生成0~%d的随机数\n",RAND_MAX);
do
{
no=GET_random_num(); //生成随机数
for(i=0; ans!=no&&i<10; i++) //判断输入的数大了还是小了
{
printf("请输入一个数,还剩%d次机会:",10-i);
scanf("%d",&ans);
num[i]=ans;
if(no>ans)
printf("小了\n");
if(no<ans)
printf("大了\n");
}
if(no!=ans)
printf("很遗憾您的机会已经用完了,正确答案是%d\n",no);
if(no==ans)
printf("恭喜您用%d次机会猜中了答案\n",i);
printf("再玩一次?...");
scanf("%d",&retry);
}
while(retry==1);
return 0;
}
int GET_random_num() // 随机数生成
{
int no;
srand(time(NULL));
no=rand()%1000;
return no;
}
程序运行结果如下图
C语言计时器小程序
#include"stdio.h"
#include"stdlib.h"
#include"time.h"
int sleep(unsigned long x) //等待函数
{
clock_t c1=clock(),c2;
do
{
if((c2=clock())==(clock_t)-1) //错误
return -1;
}
while(1000.0*(c2-c1)/CLOCKS_PER_SEC<x); //由于c1,c2是无符号整形数乘1000将其转换为浮点数
return 0;
}
int main()
{
int n,no=0;
int i;
printf("每隔1秒no值+1,当前值为:%d",no);
while(no<1000)
{
n=no;
int count=0;
do //判断为几位数,决定光标需要回退多少格
{
n/=10;
count++;
}
while(n!=0);
for(; count!=0; count--)
{
printf("\b\0\b"); //退格并输入新数字空格键实现闪烁效果
}
sleep(1000); //调用sleep等待1000ms(1s)
fflush(stdout); //清空缓存区,将缓冲区内容输入屏幕
no++;
printf("%d",no);
}
}
巧用printf函数
printf(“%*d\n”,i,n); 可以用*
表示至少输出i位同样.
前也可以用*
表示变量
在scanf写入double类型需要用%lf
可以用if(scanf(“%d%d”,&x,&y)==2)
判断x和y是否成功读取
ctype库
C 标准库的 ctype.h 头文件提供了一些函数,可用于测试和映射字符。如果参数 c 满足描述的条件,则这些函数返回非零(true)。如果参数 c 不满足描述的条件,则这些函数返回零。
常用函数
- iscntrl:判断字符是否为控制字符,如\a\b\t等;
- isprint:判断字符是否为显示字符,如A,B,C,D等;
- isgraph:判断字符是否为不包含空白字符的显示字符
- isdigit:判断字符是否为十进制数;
- isupper:判断是否为大写字符;
- islower:判断是否为小写字符;
- isalpha:判断是否为英文字符;
- isalnum:判断是否为英文字符或十进制数;
数字字符-整数字符=‘0’
"ctype.h"中的isprint
函数可以判断字符是否能够显示能返回真值,不能返回0
iscntrl(int ) 判断字符是否为控制字符