文章目录

  • 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输入
  • 解决方法
  1. 在第一个 scanf 后面加一个 getchar()

让 getchar() 把 \n 拿走,之后下一个 scanf 才能正常地接受数据

  1. 在第一个 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;
	}