scanf接收空格吗后面接的(%_%_)中间要不要逗号隔开 (%_%_)?或者是(%_,%_)?

详解C语言中scanf函数使用的一些注意点
转载 & & 作者:cqnuztq
这篇文章主要介绍了C语言中scanf函数使用的一些注意点,scanf函数的使用是C语言入门学习中的基础知识,需要的朋友可以参考下
&(一)基本介绍
Scanf是系统自带的函数,声明包含在stdio.h文件中,因此要是有该函数,必须加载#include&stdio.h&头文件。当执行到scanf函数时,程序就暂停等待用户输入,该函数只接受变量的地址,格式为&变量名。是一个阻塞式的函数,2用户输入完毕后,则将值赋值给变量,至此函数调用完毕。敲回车键告知计算机键入完毕。
(二)使用注意
①. 使用scanf函数输入一个字符变量。C scanf(“%c”,&a);
②. 同时输入多个值。Scanf(“%d,%d”,&num1,num2);
③. Scanf(“%d\n”,&a);//在内部不能使用\n转义字符,否则没完没了。
注意:在这里两个占位符之间是,隔开,则要求在输入时也使用逗号隔开如输入1,2。此时为num1=1,num2=2。若内部为“%d#%d”则输入1#2。若内部为“%dy%d”,则输入1y2。如果中间的字符是空格,则在输入时可以用空格隔开,也可以敲tab键或者是回车键作为分隔符隔开,后两者可以看做是由空格组成的。
(三)一次踩坑的碎碎念...
#include&stdio.h&
int main()
printf("选择A或者B(按回车键确认):");
scanf("%c",&ch);
if(ch == 'B' || ch == 'b')
printf("对不起,您输入的答案错误,请重新输入!\n选择A或者B(按回车键确认):");
//getchar();
scanf("%c",&ch);
printf("ch=%c",ch);
printf("\n正确\n");
上面代码的得到的结果是:
貌似跟我预想的不一样,我本想如果输入的是'B'或者'b'就继续循环输入,但是结果确实直接做了一次循环就停止了。为什么呢?
原来在循环外的那个scanf做完后按下的回车键进入了缓存,而进入循环执行scanf后(这次输入的也是'b'),缓存的内容应该是buffer[] ={'b','\n'};而执行printf("ch=%c",ch);时取的值就是'\n',所以看上去好像没有执行scanf语句,其他执行了,只是这次打印的字符不是刚刚输入的'b',而是它前一个字符'\n',所以要达到我本来的效果,则需要先将'\n'从缓存中清除掉,调用一次getchar();即可,如上代码也只需将注释的那一句代码解注释即可。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具关于逗号表达式:(a=3,b=5 ,b+=a ,c= 5*b ,d=6 )最后的结果是结果.是不是最后的值是6?谢.
关于逗号表达式:(a=3,b=5 ,b+=a ,c= 5*b ,d=6 )最后的结果是结果.是不是最后的值是6?谢.
逗号运算符,优先级别最低,它将两式联接起来,如:(3+5,6+8)称为逗号表达式,其求解过程先表达式1,后表达式2,整个表达式值是表达式2的值,如:(3+5,6+8)的值是14(a=3*5,a*4)的值是60 ,逗号表达式的形式如下:表达式1,表达式2,表达式3,. ,表达式n   逗号表达式的要领:   (1) 逗号表达式的运算过程为:从左往右逐个计算表达式.   (2) 逗号表达式作为一个整体,它的值为最后一个表达式(也即表达式n)的值.  (3) 逗号运算符的优先级别在所有运算符中最低.解释:(a=3, b=5 , b+=a , c= 5*b , d=6 )你这个逗号表达式,就是最后表达式的值,也就是6如果你改了(a=3, b=5 , b+=a , c= 5*b , d=c*2 )那么就要计算了,从左到右计算,a=3,b=5,b+=a,即b=b+a,b的值为8,c=5*b,c的值为40,d=c*2,d的值为80,也就是逗号表达式的值为80^_^
我有更好的回答:
剩余:2000字
与《关于逗号表达式:(a=3,b=5 ,b+=a ,c= 5*b ,d=6 )最后的结果是结果.是不是最后的值是6?谢.》相关的作业问题
逗号运算符是C中优先级最低的,被它分隔的表达式将被从左到右依次求值.例如:for (i = 0,j = strlen(s)-1; i < i++,j--) {...}这里没法用分号,否则会和for中用于隔开循环控制的三个语句的分号混淆在一起.逗号运算符也适用于其他关系紧密的结构,如交换两个变量的值可以写成tmp
关于逗号表达式,表达式的指是最后一个的值,所以你的(x=4*5,x*5)是为100,不过x是为20的,所以x+25是为45
x=a++,先把a的值赋给x后a+1,所以x=1,a=2,然后x=a--,也就是把a赋给x,所以x=2,a再自减a=1逗号表达式的值是最右边的表达式的值,所以逗号表达式的值是x=2(没有a=1) 再问: x=a--;这个式子不是可以分成两个式子:x=a;a=a 1;那就是说最后运行的是a=a 1;式子,那么就应该是a=
我运行了,给你截张图其实按你的理解应该是(a=3,b=6,(++a)+(b++)),这个时候才考虑先加后加的问题,这个时候才是10,但题干先++a,b++,然后再a+b,这是有区别的,要多领会.逗号它的优先级最低,代表&&a=3,b=3即(a=3),(b=3),也就是说先进行其他运算,最后再进行逗号
如果是((x=a+b),(b+c))实际上可以看成(6,10)整个逗号表达式的值应该是10但这是错的,这儿还有赋值运算符.赋值运算符的优先级是14,而逗号表达式的优先级是15,也就是说上面的表达式中 y=(x=a+b),(b+c);应该等价于这样的结合:y=x,10;如果这样写的话,则答案很清晰,为:6提示:据我统计,
逗号运算符,算完取右边的值k=2*3=66+4=好吧,错了.下面才是对的太阴了
逗号运算符(表达式1,表达式2,.表达式n) 上面的逗号运算符的值为:表达式n 的值那么 开始 i=1i++,i++先计算左边i++ 这时i=2, 再计算i++ =2 但是i=3表达式的值为 2 再答: 设计出来总有他的用处。我写代码经常会用到的给你个例子,输入一个整数,0结束while(scanf("%d",&n),
逗号表达式的出现,是出于一种“粘合”的用意.在C语言中,表达式的地位是非同寻常的,而有时我们的某些表达式在用意上需要成为一个整体时,逗号表达式就站出来了.同时,C语言的某些规定使得某些地方只能用一个表达式,如for循环中的三个表达式,此时用逗号的“粘合”作用来建立一个表达式就非常必要了.
答案是20,因为A*4与A+5的结果并没有给A,所以A是3*5的值(a=3*5,a=a*4,a=a+5)这个=65
不能那样理解.逗号表达式是已经声明过的变量合法组成的多个有效运算表达式用逗号隔开,而int a=1,b=2;只能有一种解释,那就是声明和初始化变量时可以把多个相同类型的变量用逗号隔开写在同一个类型符后面,最后用分号结束.对上面的声明,如果再声明一个,那么,c=(a=1,b=2)运算后c=2,因为(a=1,b
x应该是10才对.第一个式子把5赋值给x第二个式子3+x=8,当x本身值不变第三个式子x自身乘2,故此时x=2*5=10
逗号表达式 结果为 最后一个表达式的值即 x-1 因为 x = 3*y =>x = 15 然后 x-1 值为 14所以y=x-1=14 x=15
因为b++是先返回b的值,然后b再加1而++b是先执行b加1运算,再返回b的值
这个表达式的值应该是20,逗号表达式的值应该是逗号右边的值,对于a=3*5,a*4 左边a被赋值15,所以右边a*4=60是这个表达式的值,但并没有给a赋值,所以a的值仍然是15;对于整个表达式而言,其值应该是a+5,因为在前一个表达式中a被赋值15,所以a+5=20,所以整个表达式的值应该是20,.
我认为是17,因为这是一个逗号表达式,里面有2个逗号,3个式子!逗号表达式的值,以最后一个式子的值为值,也就是a+5.但是他是从前往后依次做算的,运算第一个式子后,a是12,运算第二个,a不变还是12,运算第三个式子,式子的结果就是17 再问: 为什么a*3没有赋值而a+5赋了 再答: 谁说是a+5赋值了,是2*6赋值
原表达式等价于:b=2*6,b*3,b+7由于=的优先级高于逗号,所以进一步等价于:(b=2*6),b*3,b+7这个逗号表达式的第一部分将b的值改为12,并且逗号表达式返回最右边的一个表达式的值,所以它返回 b+7的值,也就是返回19
逗号是依次向后运算y=4,5; //把4赋值给y,逗号依次运算,到了5,但没有等号进行赋值,所以y=4;y=(4,5); //括号内的都是赋值给y的值,先把4赋值给y,然后逗号依次运算,把5赋值给y,所以y=5.
你是不是觉得X*5后X应该等于100啊?先把程序看清楚你的表达式都没有赋值,我给一个相同格式的表达式吧(注意这里的ABCD代表的是表达式)D=((A,B),C)这里的D你没有给出,A就是你的x = 4 * 5,B就是你的x * 5,C就是你的 x + 25记住,逗号运算是从左住右一个表达式一个表达式运算,只是整个逗号表scanf()输入字符串的注意事项 - 简书
scanf()输入字符串的注意事项
我们有这样一个需求,同时输入一个字符串和一个int数字,中间用逗号隔开,然后打印出来。
#include &iostream&
#include &stdio.h&
int main() {
char str[30];
scanf("%s,%d", str, &num);
printf("%s,%d\n", str, num);
我们输入Tom,3希望得到的打印结果是Tom,3,即逗号前面赋值给str,逗号后面赋值给num。
但是实际输出结果是:Tom,3,0
因为逗号没有作为字符串的分隔符,输入的Tom,3会当成整体传给str,而后面的num是一个默认值。
我们可以有两种方式改变:
利用cin.getline()先传入str,定义分隔符为逗号。然后再scanf()数字。
cin.getline(str, 30, ',');
scanf("%d", &num);
用scanf()正则表达式。
scanf("%[^,],%d", str, &num);
据说还有va_list的实现方法,看到之后再更新总结一下。
分享软件,程序,代码学习心得。
分享太极拳,太极剑练习心得。
分享钢琴,吉他,音乐学习心得。
“人总是被一定的认知所束缚而活着,这就是现实。而这种认知本身又是暧昧不清的东西,现实也许只是镜花水月。”
C语言笔记 一终端命令 ls -l显示当前工作路径下的所有的文件及文件信息 d开头文件夹 -开头文件 r读 w写 x执行 - -当前用户的权限 - -其他用户的权限 & pwd查看终端程序的工作路径 &cd切换工作路径 &clear清理屏幕 &touch新建文件 &open...
C/C++输入输出流总结 前两天写C++实习作业,突然发现I/O是那么的陌生,打了好长时间的文件都没有打开,今天终于有点时间了,决定找本书,好好整理一下,和大家共享。 C++ I/O C++支持两种I/O,第一种是从C语言继承来的,一种是由C++定义的面向对象I/O系统。 ...
第1章 第一个C程序第2章 C语言基础第3章 变量和数据类型第4章 顺序结构程序设计第5章 条件结构程序设计第6章 循环结构程序设计第7章 数组第8章 指针第9章 函数第10章 结构型、共用型、枚举型及用户自定义型数据第12章 文件第14章 预处理宏命令 第1章 第一个C程...
数据类型转换: 1.当赋值符号两边的数据类型不同的时候,数据类型转换是自动的,不需要程序员插手 当给 int 类型的变量赋值的时候: 1).如果我们赋值的数据超出 int 的范围,这个时候 c 会将数据为 1 个随机的 int 数据. int num =...
Python黑帽编程2.3字符串、列表、元组、字典和集合 本节要介绍的是Python里面常用的几种数据结构。通常情况下,声明一个变量只保存一个值是远远不够的,我们需要将一组或多组数据进行存储、查询、排序等操作,本节介绍的Python内置的数据结构可以满足大多数情况下的需求。...
1 桌子上排列整齐的手术刀和医院手术台上的无疑,永远拭擦得一干二净,仿佛从未沾染人气。 我拿起一把手术刀,顺着脖子上的细纹划过,鲜红的口子瞬间往外渗出血液。躺着的人一动不动,好像沉睡在梦里。 一根管子从微微张开的口子插入,另一头连接着密封的玻璃瓶。血顺着管子从瓶壁缓缓而下,...
九月菊花已经开了,今天读黄巢的《不第后赋菊》 待到秋来九月八,我花开后百花杀。 冲天香阵透长安,满城尽带黄金甲。
一直不喜欢装模作样,不愿的事何必去理会,总有那么一段时间寄人篱下!都说我受不了气,吃不了苦!是啊,不愿的事何必受气何必吃苦!酸甜苦辣都感觉到了,一切都不如愿,却不得不坚持最后的十几天!只为前面的时间没有白费!十几天后我依旧狂傲!
同科生物是一家集研发、生产、销售和技术服务于一体专注于生命医学和生物技术领域的高新技术企业,主要从事系列科研生物试剂及临床分子诊断产品的研发生产和生物医药技术服务。同科生物始终怀着感恩共享的心态,努力做一个让社会、客户和员工满意的企业。 SNP分型检测服务原理: 核苷酸是D...
转自&人民精算师& 根据近期各家公司公布的2016年理赔数据整理。 快速理赔成亮点,理赔难 88~ 随着移动互联网技术的普及,在移动端发展迅猛的当下,各保险公司为解决理赔难、理赔慢的问题,改善客户体验,竞相在移动端推出了“快速理赔”、“移动理赔”、“理赔款预付”服务。 有公...c语言中scanf函数括号里面的格式控制要用逗号隔开吗?_百度知道
c语言中scanf函数括号里面的格式控制要用逗号隔开吗?
我有更好的答案
不需要,如果你用逗号隔开的话,输入数据时就要输入逗号。比如scanf(&%d%d&, &a, &b);输入时直接输入a的值,回车,然后输入b的值,回车。如果是scanf(&%d,%d&, &a, &b);输入的时候就要输入a的值,然后输入个逗号,再输入b的值回车。
为您推荐:
其他类似问题
scanf的相关知识
&#xe675;换一换
回答问题,赢新手礼包&#xe6b9;
个人、企业类
违法有害信息,请在下方选择后提交
色情、暴力
我们会通过消息、邮箱等方式尽快将举报结果通知您。}

我要回帖

更多关于 scanf后面用getchar 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信