温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

C语言之scanf函数

发布时间:2020-07-20 19:55:40 来源:网络 阅读:160 作者:师趣妮 栏目:编程语言
  • 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匹配成功,直接进行输出,
    不再需要用户输入.当然,当第二次获得的输入为整型,就不存在上述过程了.
*/



向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI