scanf,gets,getchar的理解

1、scanf()函数的使用,首先:scanf(“%”,xxx)我写xxx的地方一定是要给定的是地址,地址,地址(强调三遍);例如:int a;scanf(“%d”,&a);一定是要给定地址的,再例如:int num[5];scanf(“%d”,num);此时也是地址,因为num表示数组首元素的地址。
2、scanf对于在终端输入应该注意是情况,第一:你在代码scanf的双引号里面写成什么样子,你在终端一定要写成一模一样的,否则会出现千奇百怪的错误,例如:代码区你写的 scanf(“%d,%d”,&a,&b); 那么你在终端输入的时候一定要写成 a,b 的输入格式!!!!把逗号丢掉,必错!!!!。其次本人及其不推荐在代码写scanf()的时候除了 空格 什么都不需要加,能够在很大一定程度上避免出错。
第二:scanf这个函数,在终端输入的时候,对空格、制表符、回车这三个任意一个但凡出现,就认为输入已经截止
第三:scanf对回车(\n)的单独讲解:scanf对末尾输入的回车是存放在缓存中的,所以每一次读取,都会再读一次回车进来(具体代码演示)
scanf,gets,getchar的理解
scanf,gets,getchar的理解
注解:首先输入 a,然后 回车,因为scanf 对 末尾回车符 的处理是把 回车符(\n) 保留在缓存中,所以除了 a 之外,还有 回车 也被读进来了,即,每次蹦两个数字

3、getchar()函数的理解,getchar是用来接受字符的(不是字符串),但是它会接受空格字符,但是完全不接收回车(\n),所以在末尾的回车也会被舍弃——getchar 函数只能输入字符型,所以在输入时遇到 回车键(\n) 才从缓冲区依次提取字符,遇到 空格符不会结束,而是会接收它!!!同样的末尾的回车是存在缓存流里面,所以一般不予理会。
4、关于scanf和getchar对字符的输出,区别是scanf()函数是在完成输入以后,对所有字符一次性进行全部输出,而getchar()函数则是一个一个的把字符串从兜里掏出来!!!!

注:我们在对scanf和gets函数一起连用时,因为前面的scanf在缓存里面存放了一个回车,所以gets会有读取上面的错误,所以可以使用:scanf(“\n”);来把这个回车读出来丢掉!
5、但是 来自 pudn,只有一段开头话: 中文版本:在数据大量的情况下,用 gets 读取快于 scanf() 10倍以上

6、gets函数的使用
gets 对末尾 回车符 的处理方式是,接收 回车,但把 回车 替换为 \0,不像 scanf 是留在缓存中,所以在用 gets 时,要注意数组的大小增加1,不然就会出现数组越界等问题。
其次,除了 回车 就是 空格 的问题了,gets 是接收 空格 的,也就是可以读取并输出 空格

7、总结:scanf 忽略行开头的所有空格,并以各种格式化进行数据输入,直到遇到 空格、回车 结束输入,不接收 空格 和 回车,留在缓存区中;
getchar 只读取一个字符,包括 空格 但是不包括 回车,回车 会留在缓冲区中; gets 读取以任何字符开头的字符串,读取的字符串包括 空格 但是不包括 回车,以 回车 结束输入,接收 空格 和 回车,但之后会丢弃 回车 并以 \0 代替