标题:[求助]一个奇怪的问题
只看楼主
swrabbit
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2004-8-5
 问题点数:0 回复次数:5 
[求助]一个奇怪的问题

程序代码如下:

#include <stdio.h> int i; main() {for(i=0;i<10;i++) putchar(getchar());}

本意是输入10个字母并回车,输出为10个字母,但程序运行结果如下:

1(输入1并回车)

1(输出)

2(输入2并回车)

2(输出)

3(输入3并回车)

3(输出)

4(输入4并回车)

4(输出)

5(输入5并回车)

5(输出)

为何到5就停止了呢?不是到10呢?郁闷,请大侠指教,谢谢!

搜索更多相关主题的帖子: include 字母 
2004-08-05 13:25
天使预备役
Rank: 2
等 级:论坛游民
威 望:3
帖 子:670
专家分:10
注 册:2004-4-6
得分:0 

这是因为你用了宏 getchar(),因为它并不是敲一个按键就表示结束,而是碰到回车键后才表示结束,

这样你为了执行完putchar(getchar());如果第一个按键不是回车,你就要敲两个以上的键。执行完本句后,你只读了一次

键盘缓冲,而后面的键直到回车键继续留在缓冲中,你下次循环的时候,程序看键盘缓冲区中还有数据,就不会等你在敲

键盘接着读剩下的按键值!所以不是十。如果你每次只敲回车就可以是十次,如果你多敲几个别的键在敲回车,就少与五

次了,解决方法一,你可以在putchar(getchar());后加入fflush(stdin);清空输入流

二,你把putchar(getchar());改为putchar(getch());就可以了,因为函数getch()响应每一次按键!!!

你可以在循环中加一条语句看程序执行的次数就可以了!!!printf("%d",i);

[此贴子已经被作者于2004-08-05 16:28:15编辑过]


差点把你忘了...
2004-08-05 16:26
松木
Rank: 1
等 级:新手上路
帖 子:13
专家分:0
注 册:2004-8-5
得分:0 
把i=0改为i=1大概可以了吧。
2004-08-05 16:26
神vLinux飘飘
Rank: 13Rank: 13Rank: 13Rank: 13
来 自:浙江杭州
等 级:贵宾
威 望:91
帖 子:6140
专家分:217
注 册:2004-7-17
得分:0 
晕,看来你好象没理解天使在说些什么.........

淘宝杜琨
2004-08-05 17:51
wxl03120
Rank: 1
等 级:新手上路
帖 子:7
专家分:0
注 册:2004-7-25
得分:0 

长知识了

谢谢


2004-08-05 19:10
buio
Rank: 1
等 级:新手上路
帖 子:27
专家分:0
注 册:2004-8-5
得分:0 
  putchar(getchar()!=\n}
2004-08-05 20:39



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-3906-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.050687 second(s), 8 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved