scanf()--------按照指定格式接受用户输入(工作原理理解要点:正则表达式)
创新互联公司服务项目包括蒙城网站建设、蒙城网站制作、蒙城网页制作以及蒙城网络营销策划等。多年来,我们专注于互联网行业,利用自身积累的技术优势、行业经验、深度合作伙伴关系等,向广大中小型企业、政府机构等提供互联网行业的解决方案,蒙城网站推广取得了明显的社会效益与经济效益。目前,我们服务的客户以成都为中心已经辐射到蒙城省份的部分城市,未来相信会继续扩大服务区域并继续获得客户的支持与信任!
格式:
int num1= -1,num2 = -1; scanf("%i[间隔符]%i",&num1,&num2); /* %var指向变量在内存的详细地址,获得用户输入,直接将值写进指定内存空间中; [间隔符]可省略,省略后,C语言默认以空白字符分隔用户输入的变量值;如果不为空,则要求用户必须按照指定格式输入,否则变量未必能够全部接受到用户输入的值; C语言默认以\n即换行符结束输入; C语言默认%i此类的占位符可以进行无限匹配,直至匹配失败,默认用户变量值输入结束; 接收用户输入过程:当C获得用户从键盘的输入后,首先会将输入内容保存到一个输入缓存区内,强调保存到输入缓存区的内容包括用户输入的所有字符,当然空白字符也包括在其中, 然后会以格式控制字符串匹配缓存区内的内容.如上例,首先会%i匹配缓存区内的内容,当%i进行匹配的时候,如间隔符为空,其首先遇到空白字符时,会自动忽略,再次遇到空白 字符,则结束num1的值得获取,开始先一个变量的获取;当间隔符不为空,%i会匹配到间隔符时,结束获取,开始下一个变量的获取. */ int num = -1; char char_value; scanf("%i[间隔符]%c",&num,&char_value); /* %c可以匹配任何单字节字符,其中也包括空白字符; 所以当将用户输入存入缓存区后,如果间隔符为空,C默认以空白字符分隔不同变量输入的值.首先C会以%i匹配缓存内的内容,在没有匹配到值之前,遇到的空白字符皆会自动忽略,直至匹 配到值,再次遇到空白字符是,结束第一个变量值得获取,也即以为除了第一个变量值之外,变量值之后的空白字符和第二个变量的值仍然保存在空白字符区内,C会%c匹配剩余字符, 由于空白字符也是一个字符,且%c只能匹配一个单字节字符,所以%c匹配一个空白字符后,整个匹配过程结束,而%c却没有匹配到自己本应匹配到的值.解决办法:输入的两个变量的值 紧挨不留空白; */ printf("请输入一个数字:\n"); int num = -1; scanf("%i",&num); prinf("请输入一个字符:\n"); char char_value; scanf("%c",&char_value); printf("num = %i,%char_value = %c",num,char_value); /* 当按照如上格式,分两次分别获得输入,且后面的一次输入为字符时,结果就会发现,第二个scanf函数根本就没有运行,直接就输出了,且char_value的值为空; 其原因在与当缓存区内有值时,C就不会要求用户输入,直接拿缓存区内的值去和%c进行匹配,由于在获取完第一次输入后,缓存区内至少还有一个\n,所以%c与\n匹配成功,直接进行输出, 不再需要用户输入.当然,当第二次获得的输入为整型,就不存在上述过程了. */