关于getchar()的问题

在vc6.0环境下,在程序末尾使用getchar()函数,有时候有效果,有时候没效果。没效果的时候连续使用多个getchar()才有效果,这是为什么?#include"s... 在 vc6.0 环境下,在程序末尾使用 getchar()函数,有时候有效果,有时候没效果。没效果的时候连续使用多个 getchar()才有效果,这是为什么?
#include"stdio.h"
#include"stdlib.h"
void main()
{
int a[26]={0};
int n,i,j;
char *s;
printf("Please input the length of the string n=");
scanf("%d",&n);
s=(char *)malloc(n*sizeof(char));
if(!s)
{
printf("allocation error_aborting");
exit(1);
}
printf("please input a sting(the letters should be between 'a' and 'z'):");
scanf("%s",s);
for(i=0;i<n;i++)
{
j=s[i];
a[j-97]++;
}
printf("The result is :\n");
for(i=0;i<26;i++)
printf("%3d",a[i]);
getchar();
getchar();

}

程序的目的是输入一个小写字母字符串,统计各个字母出现的次数,把统计结果输出
展开
 我来答
xoalyg
2012-05-08 · TA获得超过4178个赞
知道大有可为答主
回答量:2356
采纳率:100%
帮助的人:2381万
展开全部
getchar()函数读取键盘缓冲区的字符,并以int类型返回键值,缓冲区为空时,该函数等待键盘输入,此时击任何键都会被读取,并返回之,并不等待<ENTER>键,这是与函数scanf()、gets()等的明显不同之处。当在程序末尾使用getchar()暂停等待用户键盘输入时,如果键盘缓冲区不空,则不能达到用户原有目的―以便查看程序运行结果。改进的方法是: 先清空键盘缓冲区,然后再执行函数getchar()。
fflush(stdin);
getchar();
追问
不好意思  我是大一初学者   麻烦解释一下缓冲区为什么可能不空,是其他程序在缓冲区留了数据吗?  可我每次用getchar()都只会键入一个字符,不会多键入的,因为我知道键入一个字符就能达到目的了。   这样缓冲去应该是空的吧?
追答
/*
please input a sting(the letters should be between 'a' and 'z') :
aasdfhjffvbhhfmklo
The result is :
a : 2
b : 1
d : 1
f : 4
h : 3
j : 1
k : 1
l : 1
m : 1
o : 1
s : 1
v : 1

请按任意键继续. . .
*/
#include
#include
#include

void main() {
int a[26] = {0};
int len,i;
char s[128];
printf("please input a sting(the letters should be between 'a' and 'z') :\n");
scanf("%s",s);
len = strlen(s);
for(i = 0;i < len;i++) a[s[i] - 'a']++;
printf("The result is :\n");
for(i = 0;i < 26;i++) if(a[i])
if(a[i]) printf("%c : %d\n",i + 'a',a[i]);
fflush(stdin);
getchar();
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
浅倚深微love
2012-05-08 · TA获得超过274个赞
知道答主
回答量:141
采纳率:0%
帮助的人:192万
展开全部
getchar 由宏实现:#define getchar() getc(stdin)。
输入输出流函数都是带有缓冲区的:
“当程序调用getchar时.程序就等着用户按键.用户输入的字符被存放在键盘缓冲区中.直到用户按回车为止(回车字符也放在缓冲区中).当用户键入回车之后,getchar才开始从stdin流中每次读入一个字符.getchar函数的返回值是用户输入的第一个字符的ASCII码,如出错返回-1,且将用户输入的字符回显到屏幕.如用户在按回车之前输入了不止一个字符,其他字符会保留在键盘缓存区中,等待后续getchar调用读取.也就是说,后续的getchar调用不会等待用户按键,而直接读取缓冲区中的字符,直到缓冲区中的字符读完为后,才等待用户按键”
所以说,你遇见的情况是输入缓冲区还有字符。有几个字符,就要调用几次getchar在会有效果。
其实你可以用用系统调用 system("pause"); 来代替。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
xunxunnuaa
2012-05-08 · TA获得超过651个赞
知道小有建树答主
回答量:548
采纳率:0%
帮助的人:447万
展开全部
getchar() 只响应一个按键输入,按了多次就需要多个。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
cool_zbk
2012-05-08 · TA获得超过282个赞
知道答主
回答量:226
采纳率:50%
帮助的人:143万
展开全部
因为getchar()接收了你之前的输入,别忘了回车也是输入,经验之谈。
追问
getchar() 不是接收我下面要输入的任意字符吗,会接收前面的输入吗?
追答
经验告诉我,真的会。

这么给你解释吧,第一个scanf的回车,被第二个scanf接收识别,所以没出问题。但是第二个scanf的回车,getchar是会接收的,所以这时候就需要两个getchar来进行一个暂停作用。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
qq993145280
2012-05-08 · TA获得超过415个赞
知道小有建树答主
回答量:275
采纳率:0%
帮助的人:313万
展开全部
是不是你前面getchar()有输入函数比如scanf呀?
更多追问追答
追问
没有scan()   我一般是程序末尾有数据输出,所以使用getchar()停顿一下,便于展示输出的数据
追答
你能复制源代码吗?
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式