文章目录
- 1. getchar()
- 2. 多个 scanf 输入
- 3. exit()
- 4. Main函数
- 5. 随机数函数
- Demo
1. getchar()
从终端接受一个字符
- 注意:
当上一次有输入的情况下,必须将上一次缓冲区里面的内容清空
2. 多个 scanf 输入
当两个 scanf 同时在同一个代码块时,输入时只能输入一次
- Why ?
当第一次输入的是 123
实际上输入的是 123\n
因此第一次使用这个值的时候 , 只拿走了 123
剩下的 \n , 自动给下一个 scanf
scanf("%c",test1);
printf("%c",test1) //显示123
scanf("%c",test2); //自动把\n放进去
printf("%c",test2) //就会显示一个换行,因此不能在第二个scanf输入
- 解决方法
- 在第一个 scanf 后面加一个 getchar()
让 getchar() 把 \n 拿走,之后下一个 scanf 才能正常地接受数据
- 在第一个 scanf 后面加一个 fflush(stdin);
刷新输入流, 就是把之前输入内容的清除了
3. exit()
要想使用exit(),要导入头文件<stdlib.h>
- 不管在哪出现exit(),一遇到,都直接退出当前程序 (关闭整个程序)
- 在括号里面的内容
EXIT_SUCCESS 成功地执行完一个程序
EXIT_FAILURE 没有成功地执行完一个程序
4. Main函数
- 在之后的程序中, Main函数的内容要简洁,要有逻辑性,尽量不写实际的代码(多用函数)
也就是把那些繁杂的代码放到多个函数里面,然后在main函数中直接调用函数
5. 随机数函数
- rand()
随机性比较差
当程序运行起来,系统自动产生一个种子
使用 rand 产生随机数之后
重新启动程序,再次使用rand
种子是一样的
种子一样,产生的随机数也是一样的
因此不是很好
- srand(time(NULL))
根据时间来生成种子,从而使随机数不相同
Good !
- 其中的
time(NULL)
,作用是获得当前的时间 - 使用
srand()
,需要加个头文件#include <windows.h>
- 使用
time(NULL)
,需要加个头文件#include <time.h>
Demo
屏幕显示数字,记住,两秒后输入数字,正确即可进入下一关
- 看看注释
#include <stdio.h>
#include <stdlib.h>
#include <time.h> //使用srand() 以时间设置种子
#include <windows.h> //Sleep
/***************************************
该程序有点问题 关数一多就判断不了
/***************************************/
int main(){ //记录每次生成多少个随机数
int count = 3;
while(1){
// fflush(stdin);
unsigned int seed = time(NULL); //将当前的时间记录下来 ,删除的话会导致第二个srand生成的种子不一样,因为中间有个两秒的延迟
srand(seed); //设置种子
for(int i = 0; i < count;i++){
int temp = rand()%9 + 1; //获得1~9的数字
printf("%d ",temp);
}
Sleep(2000); //延迟两秒 <windows.h>
system("cls"); //清屏
int temp;
srand(seed); //重新设置种子与之前一样
for(int i= 0; i < count;i++){
printf("请输入你所看到的数字:\n");
printf(":");
scanf("%d",&temp);
int old = rand()%9 +1;
fflush(stdin);
//比较
if(temp == old){
printf("成功,难度升级\n");
printf("五秒后开始下一关\n");
Sleep(5000);
break;
}else{
int whether;
printf("[错误]\n请选择是否继续(1为继续 / 2为退出):");
scanf("%d",&whether);
if(whether == 1){
printf("两秒后重新开始\n");
Sleep(2000);
continue;
}else if(whether == 2){
return 1;
}
}
}
count++;
}
return 0;
}