统计单词
题目描述
编一个程序,读入用户输入的,以“.”结尾的一行文字,统计一共有多少个单词,并分别输出每个单词含有多少个字符。 (凡是以一个或多个空格隔开的部分就为一个单词)
输入描述:
输入包括1行字符串,以“.”结束,字符串中包含多个单词,单词之间以一个或多个空格隔开。
输出描述:
可能有多组测试数据,对于每组数据,
输出字符串中每个单词包含的字母的个数。
输入例子:
hello how are you.
输出例子:
5 3 3 3
遇到问题: while(scanf("%[^.]", str) != EOF)死循环,第一次输入,
感觉输入缓冲区stdin没有清空, 使用fflush(stdin)不起作用。
网上搜索了下: 因为fflush不是标准C函数
可以采用方法:
.通过读完标准缓冲区中的剩余字符并丢弃掉来清空标准缓冲区,使用的函数是getchar(),此函数的作用是从标准输入缓冲区中读出一个字符,此方法中Linux中可行
1.通过读取剩余的字符并丢弃掉;
char ch;
while((ch=getchar())!='/n'&&ch!=EOF);
或者是:
char s[1024];
fgets(s,1024,stdin);
2.使用函数setbuf(stdin,NULL);
#include <stdio.h> void count(char str[]) { char *p = str; int cnt, flag = 0; while (*p != '.' && *p != '\0') { for (; *p == ' '; ++p); for (cnt = 0; *p != ' ' && *p != '.' && *p != '\0'; ++p, cnt++); if (flag) printf(" %d", cnt); else { flag = 1; printf("%d", cnt); } } printf("\n"); } /*fflush 不是标准C函数, 只是个扩展, 使用不起作用*/ /*清空缓存两种方法: 1: char ch; while( (ch = getchar())!='\n' && ch != EOF ); 2: char str[1024]; fgets(str, 1024, stdin); */ int main(void) { char str[256]; char ch; while(scanf("%[^.]", str) != EOF) { while( (ch = getchar())!='\n' && ch != EOF ); /*fflush(stdin); 不起作用*/ count(str); } return 0; }