1,EOF(End Of File)
EOF又叫文件结束符,是一个计算机术语。当我们用函数读取文件的时候,函数总是会返回一个状态,用EOF表示,其值一般为-1。执行代码与结果如图:
在Windows系统中,我们使用Ctrl+Z来打印EOF,在Linux中我们使用Ctrl+D。
其他:
(1),scanf()函数只有当第一个输入参数值为NULL时才会返回EOF
(2),getchar()函数中的EOF使用方法在getchar()中再来详谈。
2,getchar()函数详解
在C语言中,我们常常使用getchar()来实现字符类型数据的录入。该函数可从终端获得一个字符的ASCII码值,注意!返回的是ASCll码值,而不是字符类型,所以我们常常会使用int 类型来存储它的值,而不是char类型。
另外需要注意的一点就是,当我们在终端中输入字符的时候并不会立刻执行,需要我们按下回车才可以继续运行。getchar是以行为单位进行读取的,当我们输入一连串的字符类型的数据时,我们这些数据会缓冲在键盘缓存器中,直到回车换行一次性将所有字符按序依次赋给相应的变量(由于我们需要按下回车才可以继续运行,这就使得我们获取的字符中的最后一个永远是‘\n’,即换行符)。
由于getchar()的返回值为输入字符的ASCll码值,是非负的,因此我们常常写代码:
这行代码是存在一定问题的,当我们输入EOF(window 下Ctrl+Z,Linux 下Ctrl+D)或者读取错误时,getchar的返回值为-1,而-1是不在ASCll码表中的,使用char来定义就会产生一些错误。因此,为了避免这一类错误的发生,我们一般有如下的定义代码:
EOF在getchar()中的使用,总结为以下两点:
1, EOF作为文件结束符:当getchar()提示新的一次输入时,直接输入Ctrl+Z时才会被当作文件结束符来使用。
2, EOF作为行结束符:在字符后面输入Ctrl+Z时会当作行结束符来使用。
示例:
有如下代码:
当我们输入字符123时,按下回车键,我们可以看到123被输出后自动换了一行,
这是因为我们按下回车键的时候,‘\n’换行符也被录入了键盘缓冲区,输出来后自然也会换行。
当我们在新的输入中直接使用Ctrl+Z时,程序直接结束此时EOF作为文件结束符来使用。
当我们在字符后面输入EOF,我们发现输出的123后面没有换行,说明其到EOF处就不再录入。
3,随机函数详解
在说随机函数之前我们先来了解一下C语言中随机数的产生机制:在C语言中,rand()函数可以用来产生随机数,但是这不是真正意义上的随机数,是一个伪随机数,是根据一个数,我们可以称它为种子,为基准以某个递推公式推算出来的一系数,当这系列数很大的时候,就符合正态公布,从而相当于产生了随机数,但这不是真正的随机数,当计算机正常开机后,这个种子的值是定了的,除非你破坏了系统,为了改变这个种子的值,C提供了srand()函数,它的原形是voidsrand( int a)。---参考文献二
由以上的原理介绍我们可以知道,C语言中的随机数属于伪随机,且与两个函数密切相关(srand,rand),那么接下来我们就详细讲解一下这两个函数。
使用随机数需要包含头文件stdlib
(1),rand()—产生随机数
rand函数产生随机数有范围:0~32767
rand函数每次调用都会查询srand(seed)是否给seed设定了一个值,有的话会调用seed值来产生随机数,没有会自动赋一个初始值。
(2),srand(seed)—随机数发生器的初始化函数
rand()产生随机数时,如果用srand(seed)播下种子之后,一旦种子相同,产生的随机数将是相同的。为了让rand()产生的随机数随机化,我们使用用时间作种子srand(time(NULL)),这样每次运行程序的时间肯定是不相同的,产生的随机数肯定就不一样了。
注释:其中的time(time_t *tloc)可以用来获取系统当前的时间,需要包含头文件time
其中的参数用NULL或者0,表明其不需要将获取的结果传递到某个参数。
使用的一些技巧:
表示0~100之间的随机数:int num = rand() % 100;
表示1~100之间的随机数:int num = rand() % 100+1;
表示0~10之间的随机数:int num = rand() % 10;
示例:
当不进行seed初始化时,我们运行4次,发现结果都是41:
进行seed初始化,我们运行4次,结果如下,发现每次都不相同:
以上就是今天的一些小知识的分享啦,喜欢的同学不要忘了点个关注嗷(●’◡’●)
参考文献:
一:https://blog.csdn.net/meidong52617/article/details/44728517#comments
二:https://blog.csdn.net/qq_41658437/article/details/79156564
三:https://blog.csdn.net/lvyibin890/article/details/80141412