本帖最后由 calton007 于 2018-10-11 11:40 编辑
getchar()函数使用了两次是从缓冲区获取两个字符,并不是同一个字符
- getchar()>='A' && getchar()<='Z'
复制代码
如果这么写,循环条件变成了:
读取两个字符,第一个字符的ASCII比'A'大,第二个字符的ASCII比'Z'小,这两个条件同时满足,count+1
举个例子,假设输入"a a a "(小写字母a和空格),这个字符串是满足循环条件的,count结果为3,显然不符合统计大写字母的要求
楼主的思路是正确的,但是没能用编程语言正确的表达出来,我们一起再理一下:
第一步,获取一个字符
第二步,判断这个字符是不是大写字母:
如果这个字符是大写字母,count + 1
如果这个字符不是大写字母,返回第一步
然后我们来考虑一下如何实现,这个程序主要由两个部分组成:循环输入字符 和 判断字符是否为大写字母
1、循环输入
循环条件为每次输入一个字符,直到输入回车结束循环
每次调用getchar()都会从缓冲区读取一个字符,为了方便后续的判断,可以使用一个char变量(假设这样定义 char c;)存读取的字符
因此可以写作while((c = getchar()) != '\n'),先执行getchar()读取字符并给c赋值,然后判断读取的字符是否是'\n'
2、判断字符是否为大写字母
夸一下楼主没有把表达式写成 'A' <= getchar() <= 'Z',但由于调用了两次getchar()导致判断的不是同一个字符所以出现了错误
因此判断c是否是大写字母,写作c>='A' && c<='Z',这样就保证了是对同一个字符进行判断
具体代码我就不直接给出啦,相信楼主在理清思路之后,一定可以很轻松写出来~~~