求助一道关于getchar()的题

Ricore 2011-11-12 11:41:32
题目:
输入一个正整数 repeat (0<repeat<10),做 repeat 次下列运算:
输入一行字符,以回车结束,统计出其中的英文字母、空格、数字和其他字符的个数。


#include <stdio.h>
int main(void)
{
char c;
int blank, digit, letter, other;
int ri, repeat;
scanf("%d", &repeat);
c=getchar();
for(ri = 1; ri<=repeat; ri++){
blank=0;
digit=0;
letter=0;
other=0;
while(c=getchar() && c!='\n'){
if(c==' ')
blank++;
else if(c>='0'&&c<='9')
digit++;
else if(c>='a'&&c<='z'||c>='A'&&c<='Z')
letter++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);
}
}


输入重复次数之后只有第一次的输入(无论输入什么)会有letter = 0, blank = 0, digit = 0, other = 0出来,接着输入就什么都没有了。。。
求高人指点~
...全文
93 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
xiaotengyi2010 2011-11-13
  • 打赏
  • 举报
回复
你第一次c=getchar(),输入一个字符然后回车,就把字符和回车都放入缓冲区了,当然进行while判断时c就等于‘\n’了,所以出现了你这种情况。
xglmsfirst 2011-11-13
  • 打赏
  • 举报
回复
建议用fflush(stdin)来吃掉输入流~~~~
xiaotengyi2010 2011-11-13
  • 打赏
  • 举报
回复
看了一半天,终于看出来了,刚刚的回复是错误的哈,你其实没把优先级搞清楚,while(c=getchar() && c!='\n')这一个里面&&优先级高于=,所以你那有错,应该是while((c=getchar()) && c!='\n'),这就对了。其他不用改。
Ricore 2011-11-13
  • 打赏
  • 举报
回复
thanks a lot~
無_1024 2011-11-12
  • 打赏
  • 举报
回复

#include <stdio.h>
#include <stdlib.h>
int main(void)
{
char c;
int blank, digit, letter, other;
int ri, repeat;
scanf("%d", &repeat);
getchar();
for(ri = 1; ri<=repeat; ri++)
{
blank=0;
digit=0;
letter=0;
other=0;
while(( c = getchar() ) && c!='\n')
{
if(c==' ')
blank++;
else if(c>='0'&&c<='9')
digit++;
else if(( c>='a'&&c<='z' )|| ( c>='A'&&c<='Z' ) )
letter++;
else
other++;
}
printf("letter = %d, blank = %d, digit = %d, other = %d\n", letter, blank, digit, other);
}
return 0;
}
//不要用c=getchar();
//直接用getchar来吸收掉回车 或者用fflush(stdin);来代替getchar

70,037

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧