C语言中scanf函数输入回车符的问题
2013-06-17 11:43
423 查看
2009-04-12 00:19
scanf函数最常用的两种输入方式%d整数输入方式,以及%c字符输入方式。
用%d方式输入整数时,输入一串数字然后按回车符,输入就完成了。而用%c方式输入字符时,就稍微复杂一点。一般来说用%c输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。
【例1】:
scanf("%c",&a); /*此时输入一个字符,并按下回车,那么变量a将会正确接收输入的字符*/
scanf("%c",&b); /*但是变量b将会接收到回车符,其值为10,或者说ASCII码为10*/
【例2】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*变量y不会接收到回车符,需要用户继续输入数字,并回车,正常接收到整数*/
【例3】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%c",&a); /*但是变量a将会接收到回车符,其值为10,或者说ASCII码为10*/
【例4】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入“s”并回车*/
/*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/
scanf("%c",&a); /*此时变量a将接收到上一步输入的字母*/
/*即变量a中存储的字符将是"s",而不是回车符*/
【结论】:
当输入完整数或字符时,后面还需要输入字符时,为了避免输入的字符变成回车符,可以在输入字符前多加一条scanf语句来吃掉前面的回车符。此时用来吃掉回车符的scanf输入可以用%c方式,也可以用%d方式。当用%c方式来吃掉回车符时,回车符被读进了char类型变量中,当用%d方式来吃掉回车符时,回车符并没有被送进int类型变量中,而是在异常的字符输入后,被自动清除了。
-----------------------------------
(个人补充说明)
在scanf中%s和%c和%d的最大的区别在于:
对于%s和%d情况中:
仅有“回车符”输入,被认为是“异常输入”,接收缓冲区不会发生任何变化,同时异常输入的“回车符”被自动清除。
当有“正常输入出现时”,“回车符”被认为是“结束符”同时也是“异常输入”,同时异常输入的“回车符”被自动清除。
对于%c情况:
“回车符”被认为是“结束符”同时也是“正常输入”,所以不会被清除。由于C语言的输入输出是缓冲式的,所以,被认为是正常输入的“回车符”会缓存起来,可能对后面的输入产生影响。
C语言会对“非法的异常输入”自动清除。这样,当有非法输入时,接收缓冲区就不会收到影响,因为非法输入都被舍弃并清除。
C语言中scanf函数输入回车符的问题
在用c语言编写输入语句的时候常用到scanf函数,初学者在刚用scanf函数输入时,经常会遇到各种各样的输入错误,最重要的是一定要记住scanf函数的输入格式,scanf函数里包含了哪些东西,输入的时候就必须有哪些东西,比如:scanf("%c%c%c"),那么输入的时候就必须连续输入3个字符,中间不能有任何空格逗号或者回车符等分开,而如果是scanf("%c,%c,%c"),那么输入3个字符的时候中间就必须用一个逗号分隔。scanf函数最常用的两种输入方式%d整数输入方式,以及%c字符输入方式。
用%d方式输入整数时,输入一串数字然后按回车符,输入就完成了。而用%c方式输入字符时,就稍微复杂一点。一般来说用%c输入字符时,当输完以后,都习惯按一下回车,这时回车符就成了一个问题。
【例1】:
scanf("%c",&a); /*此时输入一个字符,并按下回车,那么变量a将会正确接收输入的字符*/
scanf("%c",&b); /*但是变量b将会接收到回车符,其值为10,或者说ASCII码为10*/
【例2】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*变量y不会接收到回车符,需要用户继续输入数字,并回车,正常接收到整数*/
【例3】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%c",&a); /*但是变量a将会接收到回车符,其值为10,或者说ASCII码为10*/
【例4】:
scanf("%d",&x); /*此时输入一串数字并回车,变量x将正常接收到输入的整数*/
scanf("%d",&y); /*若此时输入的是字母而不是数字,比如输入“s”并回车*/
/*那么变量y将不会接收到任何字符或数字,其值保持原样,不发生任何改变*/
scanf("%c",&a); /*此时变量a将接收到上一步输入的字母*/
/*即变量a中存储的字符将是"s",而不是回车符*/
【结论】:
当输入完整数或字符时,后面还需要输入字符时,为了避免输入的字符变成回车符,可以在输入字符前多加一条scanf语句来吃掉前面的回车符。此时用来吃掉回车符的scanf输入可以用%c方式,也可以用%d方式。当用%c方式来吃掉回车符时,回车符被读进了char类型变量中,当用%d方式来吃掉回车符时,回车符并没有被送进int类型变量中,而是在异常的字符输入后,被自动清除了。
-----------------------------------
(个人补充说明)
在scanf中%s和%c和%d的最大的区别在于:
对于%s和%d情况中:
仅有“回车符”输入,被认为是“异常输入”,接收缓冲区不会发生任何变化,同时异常输入的“回车符”被自动清除。
当有“正常输入出现时”,“回车符”被认为是“结束符”同时也是“异常输入”,同时异常输入的“回车符”被自动清除。
对于%c情况:
“回车符”被认为是“结束符”同时也是“正常输入”,所以不会被清除。由于C语言的输入输出是缓冲式的,所以,被认为是正常输入的“回车符”会缓存起来,可能对后面的输入产生影响。
C语言会对“非法的异常输入”自动清除。这样,当有非法输入时,接收缓冲区就不会收到影响,因为非法输入都被舍弃并清除。
相关文章推荐
- C语言中scanf函数输入回车符的问题
- C语言中scanf函数输入回车符的问题
- C语言中scanf函数输入回车符的问题
- 关于用连续用多个scanf函数输入数据时前面的scanf函数会在缓冲区留下回车符的问题
- C语言scanf函数输入时键盘缓冲区\n的问题[经典问题]
- C语言scanf函数输入时键盘缓冲区\n的问题[经典问题]
- C语言scanf函数输入时键盘缓冲区\n的问题
- C语言scanf输入char类型时遇到回车问题:
- 【C语言天天练(十五)】字符串输入函数fgets、gets和scanf
- 深入解析scanf()/getchar()和gets()等函数针对字符串输入的问题
- 关于c语言的输入函数问题
- C语言里scanf函数的有关问题
- C语言中scanf格式化输入函数
- C语言格式输入函数scanf()详解
- C语言中正确使用输入函数scanf
- C语言中用scanf函数输入字符时,为什么要在输入控制符%c前面加空格?
- c语言笔记——对scanf()等输入函数的深入理解
- C语言输出函数(printf)和输入函数(scanf)
- C语言的格式化输入函数scanf
- scanf()函数连续输入数字,字符引发的小问题