首页 > 其他分享 >scanf()

scanf()

时间:2023-11-29 10:26:07浏览次数:31  
标签:数据 scanf 用户 缓冲区 空白符 输入

要想破解 scanf() 输入的问题,一定要学习缓冲区,它能使你对输入输出的认识上升到一个更高的层次,以后不管遇到什么疑难杂症,都能迎刃而解。可以说,输入输出的“命门”就在于缓冲区。

scanf() 是从标准输入设备(键盘)读取数据,带有行缓冲区的,这让 scanf() 具有了一些独特的“性格”,例如可以连续输入、可以输入多余的数据等。反过来,scanf() 也出现了一些奇怪的行为,例如,有时候两份数据之间有空格会读取失败,而有时候两份数据之间又必须有空格。

scanf() 的这些特性都是有章可循的,其根源就是行缓冲区。

 

当遇到 scanf() 函数时,程序会先检查输入缓冲区中是否有数据:

  • 如果没有,就等待用户输入。用户从键盘输入的每个字符都会暂时保存到缓冲区,直到按下回车键,产生换行符\n,输入结束,scanf() 再从缓冲区中读取数据,赋值给变量。
  • 如果有数据,那就看是否符合控制字符串的规则:
    • 如果能够匹配整个控制字符串,那最好了,直接从缓冲区中读取就可以了,就不用等待用户输入了。
    • 如果缓冲区中剩余的所有数据只能匹配前半部分控制字符串,那就等待用户输入剩下的数据。
    • 如果不符合,scanf() 还会尝试忽略一些空白符,例如空格、制表符、换行符等:
      • 如果这种尝试成功(可以忽略一些空白符),那么再重复以上的匹配过程。
      • 如果这种尝试失败(不能忽略空白符),那么只有一种结果,就是读取失败。


你看,scanf() 并不是直接让用户从键盘输入数据,而是先检查缓冲区,处理缓冲区中的数据。对于初学者来说,scanf() 检查缓冲区的规则也许有点复杂

标签:数据,scanf,用户,缓冲区,空白符,输入
From: https://www.cnblogs.com/my--blogs/p/17863910.html

相关文章

  • scanf
    在C语言中,scanf函数从标准输入(键盘)读取用户输入的数据。这是一个常用的函数,但也有很多注意事项和细微差别需要了解。基本语法:intscanf(constchar*format,...);参数:format:一个字符串,指定输入的格式。...:可变参数,根据格式字符串来确定类型和数量。返回值:该函......
  • scanf():
    scanf():和printf()类似,scanf()可以输入多种类型的数据。 =scanformat 格式化扫描,也就是从键盘获得用户输入,和printf的功能正好相反#include<stdio.h>intmain(){inta=0,b=0,c=0,d=0;scanf("%d",&a);//输入整数并赋值给变量ascanf("%d",&b);//输......
  • scanf和赋值忽略符用法
    一.scanf基本用法 1.scanf()函数用于读取用户的键盘输入。scanf()处理数值占位符时会自动忽略空白字符,包括空格、制表符、换行符等。所以,用户输入数据之间,有一个或多个空格不影响scanf()解读数据,另外,用户使用回车键,将输入分成几行,也不影响解读。二.scanf的返回值 1.scanf()的返......
  • SATA基础+更改终端颜色+PCI.ids位置+Linux和Windows的scanf+C语言C++的局部变量与全局
    SATA基础https://zhuanlan.zhihu.com/p/554251608物理信号物理层功能时钟恢复:对于高频传输,一般是采用差分信号传输,并且没有单独的时钟,时钟存在于编码内部串并转换:对于高频传输,串联信号可以做到更高的频率。字节对其:8/10编码转换的10bit对其链路层、传输层链路层和传输......
  • 关于scanf("%d %d", &a, &b) == 2 ?
    scanf函数的返回值可以分成三种情况1)正整数,表示正确输入参数的个数。例如执行scanf("%d%d",&a,&b);如果用户输入"34",可以正确输入,返回2(正确输入了两个变量);如果用户输入"3,4",可以正确输入a,无法输入b,返回1(正确输入了一个变量)。2)0,表示用户的输入不匹......
  • scanf读取String和char []的区别
     首先,c语言中没有string类型,直接用scanf读入string类型是不正确的。如:stringa;scanf("%s",a);//录入"asd"cout<<a;//输出后a是空正确方式:stringa;a.resize(8);scanf("%s",&a[0]);//录入"asd"cout<<a;//输出:asd 为......
  • printf 和scanf的用法(最终版)
    一 格式化输入函数scanfscanf函数的功能是格式化输入任意数据列表,其一般调用格式为:scanf(格式控制符,地址列表)【说明】(1)地址列表中给出各变量的地址,可以为变量的地址,以&开头,也可以为数组,字符串的首地址。(2)格式控制符由%和格式符组成,作用......
  • 一 . 格式化输出函数 scanf
    scanf函数的功能是格式化输出任意数据列表,其一般调用格式为:scanf(格式控制符,地址列表)。【说明】(1)地址列表中给出各变量的地址,可以为变量的地址,以&开头,也可以为数组,字符串的首地址。(2)格式控制符由%和格式符组成,作用是将要输入的字符按指定的格式输入如%d,%c......
  • scanf&printf
         ......
  • printf scanf
               ......