c语言当scanf到0时停止,C语言中用scanf.doc

C语言中用scanf 连续输入两个字符时的问题

#include int main char ch1,ch2;printf "Input for ch1:\n" ;scanf "%c",&ch1 ;printf "ch1 %c\n",ch1 ;printf "Input for ch2:\n" ;scanf "%c",&ch2 ;printf "ch2 %c\n",ch2 ; 表面上看这段程序是没有错的,也可以运行,但运行过程中到第二个scanf输入值给ch2时,程序不会停止,而是直接运行到最后一个printf ! 原来scanf是从标准输入缓冲区中读取输入的数据,而%c的字符输入格式会接收回车字符,在输入第一个scanf时输入字符后按回车结束,输入缓冲中保存了这个回车符,遇到第二个scanf时,它自动把这个回车符赋给了ch2。而如果第二个scanf的输入格式不是%c时,由于格式不匹配,这个回车符会被自动忽略,所以只有在连续输入两个%c的格式时才会出现这样的问题! 解决办法: 1.清空输入缓冲区 第一个scanf后加入语句:fflush stdin ;?? //C语言清空输入缓冲区函数 2.格式控制中加入空格 将第二个scanf改为:scanf " %c",&ch2 ; //在%号前面加一个空格,空格可以抵消前面输入的回车符。

ps:本题其实不用那么麻烦,scanf "%c%c",&ch1,&ch2 ;一句就可以搞定了,上面只是介绍下解决问题的方法。 scanf格式输入时要求输入格式与格式控制符中的完全一样,例如:scanf "abcd%c",&ch ;输入时必须输入abcde,ch得到的值才为e。

另外:

1.scanf "%d%d",&x,&y ;时,输入必须为10 20(注:10和20之间要用空格,回车或TAB键之中的任选一种隔开)

2.scanf "%d,%d",&x,&y ;时,输入必须为10,20

3.scanf "%d+%d",&x,&y ;时,输入必须为10+20

为了您的安全,请只打开来源可靠的网址

打开网站????取消

来自: /delhomme/blog/item/008ba9fac90f2a244f4aeaf5.htmlc语言输入输出缓冲区的概念

2008-05-10 17:09:17

转载▼

标签:

缓冲区

n1

分隔符

回车符

it分类: 你肯定会奇怪为什么一开始先说这个,一开始不都是数据类型什么的嘛,这个写在最前面因为后面的程序即使最简单的code都会用到输入输出,输出比较简单,可以放在后面再说,但是输入就不同了,如果不先了解一下,可能会得到和你预想不同的结果哦^_^.也正是由于和一般的c语言介绍方式不同,为了看起来正规一些,我就把这章叫做chapter0了,完全可以先跳过去,直接看chapter1.1.getchar先引用一下前人的成果 有修改 ^_^:/cxyol/archive/2006/03/18/628324.aspx

getchar 是stdio.h中的库函数,它的作用是从stdin流中读入一个字符,也就是说,如果stdin有数据的话不用输入它就可以直接读取了。而getch 和getche 是conio.h中的库函数,它的作用是从键盘接收字符。getchar带有显示。 与前面两个函数的区别在于: getchar 函数等待输入直到按回车才结束(前提是缓冲区没有数据),回车前的所有输入字符都会逐个显示在屏幕上。但只有第一个字符作为函数的返回值。

#include #include void main char c; c getchar ; //getchar 在这里它只返回你输入字符串的第一个字符,并把返回值赋值给c putchar c ; printf "\n\n" ; 这个程序你运行一下,相信你又会有疑问了。这个就是从缓冲区中读取了例子。第一次getchar 时,确实需要人工的输入,但是如果你输了多个字符,以后的getchar 再执行时就会直接从缓冲区中读取了。

#include

#include

void main char c; while c getchar ! '\n' printf "%c",c ; printf "\n\n" ; 程序运行时,首先停下来,等你输入一串字符串,输入完毕后,它把你输入的整个字符串都输出来了,咦,你不是说getchar 只返回第一个字符么,这里怎么?

因为我们输入的字符串并不是取了第一个字符就把剩下的字符串丢掉了,它还在我们的内存中,就好比,开闸放水,我们把水放到闸里去以后,开一次闸就放掉一点,开一次就放掉一点,直到放光了为止,这里开闸动作就相当于调用一次getchar

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值