怎么能判断出getchar()时输入了几个字符

怎么能判断出getchar()时输入了几个字符?如下面的代码!
while(b=getchar()!='\n')
count++;
为什么b的值为空值?

getchar() 一次只能读入1个字符,只有当输入缓冲区有内容时才开始读。
输入缓冲区没有内容,并且 键盘缓冲区的内容没有送到输入缓冲区之前,getchar() 处于等待状态。
只有当拍入 Enter 键 时,键盘缓冲区的内容 才 送到输入缓冲区,而 getchar() 一次只读入1个字符,其它多余字符和Enter 键 保留 在 输入缓冲区。
count = 0; while(b=getchar()!='\n') count++;
printf("%d %x %c",b,b,b);
这里用 while() {} 循环,不断从 输入缓冲区 读字符,一旦读到 Enter键,则退出循环。
count 是计数器,每读1次,只要不是Enter键,count 就加1。
如果 你拍入 abc123回车
则 count 变为6。b 里保存最后一次 getchar 得来的 字符 '\n'
b的值 不是 空值,你可以用 %d 格式打印它的10进制值,用 %x 格式打印16进制值
用 %c 格式打印可以看到 光标换行。
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-10-07
getchar只能读取一个字符。所以会一个一个读取键盘缓冲区的字符,直到读取到回车,还有,b为空值从这里看不出来,除非你把完整程序贴出来,我编了一个你可以看看。
#include <stdio.h>

main()
{
char b;
int count=0;

while(b=getchar()!='\n'){
count++;
}
printf("%d", count);
system("pause");
}
这个我用dev-c++编译通过,至于有一位说的优先级的问题,=和!=是等优先级的,排列顺序是从左到右,所以你的写法没错,不够说句实话我也认为最好用()括起来,毕竟不括显得有点乱。
第2个回答  2014-01-29
因为"!="的优先级高于"=",所以b=getchar()!='\n'等价于b=(getchar()!='\n'),b的值不是0就是1,
那么当getchar()读入'\n'时,b就等于0,也就是空值了,而b=0的值也为0,循环也结束了。
把b=getchar()加个括号:
while( (b=getchar())!='\n')
这样的话,b的值就是输入的字符,循环结束后b的值是'\n', 也就是10,16进制0X0A
第3个回答  推荐于2018-03-24
while里的东西是从右向左结合的,getchar得到一个空值,再赋给b,所以b是空值本回答被网友采纳
第4个回答  2018-05-14
#include <stdio.h>
int main()
{
int i=0;
for (;;i++)
{
char a;
a = getchar();
if (a == '\n')break;
}
printf("%d\n", i);
}

相关了解……

你可能感兴趣的内容

本站内容来自于网友发表,不代表本站立场,仅表示其个人看法,不对其真实性、正确性、有效性作任何的担保
相关事宜请发邮件给我们
© 非常风气网